MoveFolder: Difference between revisions

From Bohemia Interactive Community
Category: Mikero Tools
m (Text replacement - " it's" to " it is")
m (Some wiki formatting)
Line 1: Line 1:
       
MoveFolder Version 1.xx by Mikero<br><br>
MoveFolder Version 1.xx by Mikero<br> <br>
see readMeGeneral and fixes<br>
see readMeGeneral and fixes<br>


 
----
----
'''''MoveFolder''''' is the successor to SetP3d which was written in 02script and quite difficult to  
'''''MoveFolder''''' is the successor to SetP3d which was written in 02script and quite difficult to
maintain.
maintain.
The '''''intent'' '''of '''''MoveFolder'''''  
The '''''intent'' '''of '''''MoveFolder'''''
is to move some, or all of the content of a pbo or series of pbos, to another  
is to move some, or all of the content of a pbo or series of pbos, to another
one.
one.


<blockquote>
{{Feature|important|
Because of BI's astonishing inability to use relative
P3Ds must reference the pbo they are in to get at their own data for e.g rvmats, sqf/sqs, configs.
addressing, p3d's must reference the pbo they are in to get at their own data.  
If you move anything to another pbo (folder), the items within that folder need their addressing revised.
Ditto, rvmats, ditto sqx, ditto configs. If you move anything to another pbo  
}}
(folder), the items within that folder need their addressing revised. Insane,  
'''''MoveFolder''''' allows any combination P3Ds,
but there you go.
wrps, rvmats and configs and '''all''' their associated data to be transferred to a different pbo.
It does so by renaming (and copying) all appropriate file references encountered in these
files to the new prefix. ''' ''MoveFolder''''' '''only''' alters
items in the target folder, all other files are unaffected.


</blockquote>
'''''MoveFolder''''' allows any combination p3d's,
wrps, rvmats and configs and '''all''' their associated data to be transferred to a different pbo.
It does so by renaming (and copying) all appropriate file references encountered in these
files to the new prefix. ''' ''MoveFolder''''' '''only''' alters
items in the target folder, all other files are unaffected.


'''MoveFolder''' can be terrifying to the un-initiated.
'''MoveFolder''' can be terrifying to the un-initiated.  
The sheer volume of changes it makes to files can be staggering, and can take a
The sheer volume of changes it makes to files can be staggering, and can take a  
long time to complete. The two things to bear in mind are:
long time to complete. The two things to bear in mind are:


 
* No matter what it does, no matter how gigantic (or  trivial) the changes made:  movefolder does not  touch or alter existing source(s).
* No matter what it does, no matter how gigantic (or  trivial) the changes made:  movefolder does not  touch or alter existing source(s).
* you no longer  have to do  these changes by hand with the attendant mistakes and hours  of your time trying to.
* you no longer  have to do  these changes by hand with the attendant mistakes and hours  of your time trying to.
 
'''''MoveFolder''''' has two distinct  
'''''MoveFolder''''' has two distinct
modes of operation:
modes of operation:


 
* standard p3d alteration, or,
* standard p3d alteration, or,
* using a config.cpp/bin
* using a config.cpp/bin
 
The need for this application are many but prime examples  
The need for this application are many but prime examples
would be:
would be:


 
* Merging multiple pbo's into a single pbo.
* Merging multiple pbo's into a single pbo.
* splitting a big pbo into smaller ones.
* splitting a big pbo into smaller ones.
* retrieving only those p3ds of relevance from arma1,dayz  or ifa to a different engine
* retrieving only those p3ds of relevance from arma1,dayz  or ifa to a different engine
 
'''''MoveFolder''''' works with '''any''' mixture of plain jane  
'''''MoveFolder''''' works with '''any''' mixture of plain jane
or binarised file formats of '''any''' file type.
or binarised file formats of '''any''' file type.


 
'''''MoveFolder''''' is not intended for use with  
'''''MoveFolder''''' is not intended for use with
missions. your mileage will vary. For islands see end of document.
missions. your mileage will vary. For islands see end of document.


 
----
----
 
'''Installation:'''
'''Installation:'''


 
'''''MoveFolder''''' uses the venerable MoveObject.exe as it is  
'''''MoveFolder''''' uses the venerable MoveObject.exe as it is
core. you must '''also''' have a copy of moveobject.exe installed
core. you must '''also''' have a copy of moveobject.exe installed


 
'''''MoveFolder''''' comes with an auto-installer. This ensures  
'''''MoveFolder''''' comes with an auto-installer. This ensures
it is part of mikero's pbo tools suite. Many of the tools interact with each  
it is part of mikero's pbo tools suite. Many of the tools interact with each
other. MoveFolder is no exception.
other. MoveFolder is no exception.


 
If you choose to install it manually, you clearly know  
If you choose to install it manually, you clearly know
what you're doing.
what you're doing.


 
----
----
 
'''How to:'''
'''How to:'''


 
All operations require a 'Pdrive'. '''''MoveFolder'''''  
All operations require a 'Pdrive'. '''''MoveFolder'''''
infers the drive from the folder-to-make. It is normally P:\. If you specify  
infers the drive from the folder-to-make. It is normally P:\. If you specify
C:\&quot;my documents\some\where&quot;, you also believe in Santa Klaus.
C:\&quot;my documents\some\where&quot;, you also believe in Santa Klaus.


 
<u>Method 1: p3d's only</u>
<u>Method 1: p3d's only</u>


 
# simply create a new folder in 'Pdrive':\any\where. This folder  is, ultimately, your new pbo.
# simply create a new folder in 'Pdrive':\any\where. This folder  is, ultimately, your new pbo.
# drop any number of p3d's, and only p3d's,  into that folder.
# drop any number of p3d's, and only p3d's,  into that folder.
# use the gui to browse to this '''destination'''
# use the gui to browse to this '''destination'''
# crunch.
# crunch.
 
Assuming all references in those p3d's point to valid files elsewhere on the  
Assuming all references in those p3d's point to valid files elsewhere on the
'pdrive', '''''MoveFolder''''' will build a corresponding data\ folder accordingly.  
'pdrive', '''''MoveFolder''''' will build a corresponding data\ folder accordingly.
'''''MoveFolder''''' recursively scans this folder as rvmats or proxies are being added,  
'''''MoveFolder''''' recursively scans this folder as rvmats or proxies are being added,
checking them in turn for their own external references, and so on.
checking them in turn for their own external references, and so on.


 
If a p3d does not have valid references. eg my\great\addon\data\sexy.paa  
If a p3d does not have valid references. eg my\great\addon\data\sexy.paa
does not exist. then you, not '''''MoveFolder''''' , has a problem. You can hardly expect  
does not exist. then you, not '''''MoveFolder''''' , has a problem. You can hardly expect
it to copy phantoms.
it to copy phantoms.


 
You can subsequently add to this folder, other p3d's.  
You can subsequently add to this folder, other p3d's.
'''''MoveFolder''''' will account for them. The already done, p3d's (and rvmats) are not  
'''''MoveFolder''''' will account for them. The already done, p3d's (and rvmats) are not
affected.
affected.


 
You can then add or create config. sounds or scripts or  
You can then add or create config. sounds or scripts or
anything else into this folder. Should you subsequently use MoveFolder again  
anything else into this folder. Should you subsequently use MoveFolder again
(because you need yet another p3d) it has no effect on what's there already  
(because you need yet another p3d) it has no effect on what's there already
including your added scripts (eg).
including your added scripts (eg).


 
<u>Method2:: config only</u>
<u>Method2:: config only</u>


1) browse to the '''source '''folder containing '''the''' config of interest


# browse to the '''source '''folder containing '''the''' config of interest
2) browse to a newly created '''empty''' destination folder or use the  
# browse to a newly created '''empty''' destination folder or use the browse facility to create one.
browse facility to create one.
# crunch


3) crunch


''A sanity check is made for method 2 that the
''A sanity check is made for method 2 that the  
destination folder is empty. There is no particular reason for this other than
destination folder is empty. There is no particular reason for this other than  
to prevent you inadvertently destroying some\thing you didn't intend.''
to prevent you inadvertently destroying some\thing you didn't intend.''


 
----
----
 
'''Nitty Gritty'''
'''Nitty Gritty'''


 
'''source: '''The source config.cpp or bin.<u> It's location does  
'''source: '''The source config.cpp or bin.<u> It's location does
not have any bearing on the location of the files it refers to.</u>
not have any bearing on the location of the files it refers to.</u>


 
'''destination:''' The new folder where you want these items  
'''destination:''' The new folder where you want these items
to be built. this folder subsequently becomes a pbo in it is own right.
to be built. this folder subsequently becomes a pbo in it is own right.


 
'''gui options:'''
'''gui options:'''


 
* Move CA/A3 Off by default. if you want future proofing against the engine check this option to copy all relevant files into this new space. This makes the p3d truly independent.
* Move CA/A3 Off by default. if you want future proofing against the engine check this option to copy all relevant files into this new space. This makes the p3d truly independent.
* Move Proxies
* Move Proxies
  <blockquote>  
  <blockquote>
Off by default. Any proxies p3d's used are placed  
Off by default. Any proxies p3d's used are placed
in this folder too. It is 'standard practice' for building furniture eg to be  
in this folder too. It is 'standard practice' for building furniture eg to be
in a separate pbo.
in a separate pbo.


 
set this option if you want to copy that furniture into  
set this option if you want to copy that furniture into
stand-alone.
stand-alone.


 
If ca/a3 is also set, then it is proxies are also added.  
If ca/a3 is also set, then it is proxies are also added.
Otherwise not.
Otherwise not.


  </blockquote>  
  </blockquote>
* Pause output
* Pause output
  <blockquote>  
  <blockquote>
show the results of moveobject's renaming operations,  
show the results of moveobject's renaming operations,
rather than briefly flash the screen.
rather than briefly flash the screen.


 
----
----
  </blockquote>  
  </blockquote>
'''Architecture'''
'''Architecture'''


 
'''''MoveFolder''''' provides the following tree architecture
'''''MoveFolder''''' provides the following tree architecture


 
Pdrive:\Any\Prefix\FolderOfP3d(s)
Pdrive:\Any\Prefix\FolderOfP3d(s)


 
* 'FolderOfP3ds' becomes the new pbo
* 'FolderOfP3ds' becomes the new pbo
* Any\Prefix is  your project and tag name
* Any\Prefix is  your project and tag name
 
all p3d's must be in this root folder.
all p3d's must be in this root folder.


 
all sounds will be written to ~Sounds\
all sounds will be written to ~Sounds\


 
all rtm's will be written to ~Anims\
all rtm's will be written to ~Anims\


 
all sqx will be written to ~Scripts\
all sqx will be written to ~Scripts\


 
all textures and materials will be written to ~data\
all textures and materials will be written to ~data\


 
'''''MoveFolder''''' attempts to copy the  
'''''MoveFolder''''' attempts to copy the
original pbo's architecture where possible. if the original rvmats were in  
original pbo's architecture where possible. if the original rvmats were in
data\rvmats, this app will place them similarly. if not, they go into the common  
data\rvmats, this app will place them similarly. if not, they go into the common
~data\ folder.
~data\ folder.


 
* texture rules
* texture rules
 
'''''MoveFolder''''' considers pax, png or tga to be equivalent. it copies whichever of  
'''''MoveFolder''''' considers pax, png or tga to be equivalent. it copies whichever of
these files is found with the latest file date for unbinarised p3d's and copies  
these files is found with the latest file date for unbinarised p3d's and copies
only a pax for binarised.
only a pax for binarised.


 
----
----
 
<u>'''config.cpp and bin'''</u>
<u>'''config.cpp and bin'''</u>


 
Creating new pbo's from just p3d content is not normally sufficient. configs  
Creating new pbo's from just p3d content is not normally sufficient. configs
which handle those p3d's normally have additional damage rvmats, picture= and  
which handle those p3d's normally have additional damage rvmats, picture= and
icon= specifiers, along with sounds rtms and scripts. While these additional files are  
icon= specifiers, along with sounds rtms and scripts. While these additional files are
often only related to the p3d, there is nothing in the p3d that utilises them.  
often only related to the p3d, there is nothing in the p3d that utilises them.
Hence they wont be detected for transfer.
Hence they wont be detected for transfer.


 
MoveFolder will create the necessary contents of a pbo  
MoveFolder will create the necessary contents of a pbo
folder simply by examining a config.cpp or config.bin sourced from some other  
folder simply by examining a config.cpp or config.bin sourced from some other
folder.
folder.


 
For this mode of operation, all that is required is the config. (not p3d's)
For this mode of operation, all that is required is the config. (not p3d's)


 
Any and all file references detected in the config are  
Any and all file references detected in the config are
copied over and massaged (with the usual options applying of 'move ca/a3' and  
copied over and massaged (with the usual options applying of 'move ca/a3' and
'move proxies'). This includes p3d's.
'move proxies'). This includes p3d's.


 
be aware that the end result is a NEW config.cpp in the target folder.
be aware that the end result is a NEW config.cpp in the target folder.


 
'''Independent config pbo'''
'''Independent config pbo'''


 
it is common practice for designers to separate their  
it is common practice for designers to separate their
pbo's into ones containing p3ds and data, and one containing a config only, for  
pbo's into ones containing p3ds and data, and one containing a config only, for
those models.
those models.


 
the produced config.cpp can be transferred to any pbo the  
the produced config.cpp can be transferred to any pbo the
designer wishes. it is NOT prefix sensitive.
designer wishes. it is NOT prefix sensitive.


 
----
----
 
'''model.cfg via config.cpp'''
'''model.cfg via config.cpp'''


 
For unbinarised p3d's MoveFolder checks for the existence  
For unbinarised p3d's MoveFolder checks for the existence
of a 'model.cfg' or a 'nameofmodel.cfg' in the same folder as the p3d
of a 'model.cfg' or a 'nameofmodel.cfg' in the same folder as the p3d


 
if present,it copies it to the root of the target folder.
if present,it copies it to the root of the target folder.


 
there is a possibility of failure where two or more  
there is a possibility of failure where two or more
model.cfg's exist emanating from different p3d source folders
model.cfg's exist emanating from different p3d source folders


 
 
----
----
 
identical file names from sources
identical file names from sources


 
where a filename conflicts with the same name but from a diffferent source  
where a filename conflicts with the same name but from a diffferent source
folder. example
folder. example


 
ca\data\default.rvmat
ca\data\default.rvmat


 
ca\any\where\else\default.rvmat
ca\any\where\else\default.rvmat


 
a check is made for indentical content. If the same. the first file  
a check is made for indentical content. If the same. the first file
encountered is used as a substitute for the others.
encountered is used as a substitute for the others.


 
where files are not identical they are labelled
where files are not identical they are labelled


 
'''cpy_'''&lt;filename.ext&gt;
'''cpy_'''&lt;filename.ext&gt;


 
eg
eg


 
'''cpy_'''default.rvmat
'''cpy_'''default.rvmat


 
This process is iterative.Where three files eg are from different sources,  
This process is iterative.Where three files eg are from different sources,
the results would be
the results would be


 
default.rvmat
default.rvmat


 
'''cpy_'''default.rvmat
'''cpy_'''default.rvmat


 
'''cpy_cpy_'''default.rvmat
'''cpy_cpy_'''default.rvmat


   
 
----
----
 
'''Islands'''
'''Islands'''


 
There is currently modest support for moving islands.
There is currently modest support for moving islands.


 
MoveFolder behaves slightly different for islands in that it assume you want  
MoveFolder behaves slightly different for islands in that it assume you want
to move the island and it is textures but NOT the p3d objects associated with it.
to move the island and it is textures but NOT the p3d objects associated with it.


 
For this reason, p3d's are ignored when a wrp is detected
For this reason, p3d's are ignored when a wrp is detected


 
The only other difference is that textures and rvmats go into a ~layers\  
The only other difference is that textures and rvmats go into a ~layers\
folder. (pictures and icons described in a config.cpp still go into ~data\
folder. (pictures and icons described in a config.cpp still go into ~data\



Revision as of 16:39, 11 January 2026

MoveFolder Version 1.xx by Mikero

see readMeGeneral and fixes



MoveFolder is the successor to SetP3d which was written in 02script and quite difficult to maintain. The intent of MoveFolder is to move some, or all of the content of a pbo or series of pbos, to another one.

P3Ds must reference the pbo they are in to get at their own data for e.g rvmats, sqf/sqs, configs. If you move anything to another pbo (folder), the items within that folder need their addressing revised.

MoveFolder allows any combination P3Ds, wrps, rvmats and configs and all their associated data to be transferred to a different pbo. It does so by renaming (and copying) all appropriate file references encountered in these files to the new prefix. MoveFolder only alters items in the target folder, all other files are unaffected.


MoveFolder can be terrifying to the un-initiated. The sheer volume of changes it makes to files can be staggering, and can take a long time to complete. The two things to bear in mind are:


  • No matter what it does, no matter how gigantic (or trivial) the changes made: movefolder does not touch or alter existing source(s).
  • you no longer have to do these changes by hand with the attendant mistakes and hours of your time trying to.

MoveFolder has two distinct modes of operation:


  • standard p3d alteration, or,
  • using a config.cpp/bin

The need for this application are many but prime examples would be:


  • Merging multiple pbo's into a single pbo.
  • splitting a big pbo into smaller ones.
  • retrieving only those p3ds of relevance from arma1,dayz or ifa to a different engine

MoveFolder works with any mixture of plain jane or binarised file formats of any file type.


MoveFolder is not intended for use with missions. your mileage will vary. For islands see end of document.



Installation:


MoveFolder uses the venerable MoveObject.exe as it is core. you must also have a copy of moveobject.exe installed


MoveFolder comes with an auto-installer. This ensures it is part of mikero's pbo tools suite. Many of the tools interact with each other. MoveFolder is no exception.


If you choose to install it manually, you clearly know what you're doing.



How to:


All operations require a 'Pdrive'. MoveFolder infers the drive from the folder-to-make. It is normally P:\. If you specify C:\"my documents\some\where", you also believe in Santa Klaus.


Method 1: p3d's only


  1. simply create a new folder in 'Pdrive':\any\where. This folder is, ultimately, your new pbo.
  2. drop any number of p3d's, and only p3d's, into that folder.
  3. use the gui to browse to this destination
  4. crunch.

Assuming all references in those p3d's point to valid files elsewhere on the 'pdrive', MoveFolder will build a corresponding data\ folder accordingly. MoveFolder recursively scans this folder as rvmats or proxies are being added, checking them in turn for their own external references, and so on.


If a p3d does not have valid references. eg my\great\addon\data\sexy.paa does not exist. then you, not MoveFolder , has a problem. You can hardly expect it to copy phantoms.


You can subsequently add to this folder, other p3d's. MoveFolder will account for them. The already done, p3d's (and rvmats) are not affected.


You can then add or create config. sounds or scripts or anything else into this folder. Should you subsequently use MoveFolder again (because you need yet another p3d) it has no effect on what's there already including your added scripts (eg).


Method2:: config only


  1. browse to the source folder containing the config of interest
  2. browse to a newly created empty destination folder or use the browse facility to create one.
  3. crunch


A sanity check is made for method 2 that the destination folder is empty. There is no particular reason for this other than to prevent you inadvertently destroying some\thing you didn't intend.



Nitty Gritty


source: The source config.cpp or bin. It's location does not have any bearing on the location of the files it refers to.


destination: The new folder where you want these items to be built. this folder subsequently becomes a pbo in it is own right.


gui options:


  • Move CA/A3 Off by default. if you want future proofing against the engine check this option to copy all relevant files into this new space. This makes the p3d truly independent.
  • Move Proxies

Off by default. Any proxies p3d's used are placed in this folder too. It is 'standard practice' for building furniture eg to be in a separate pbo.


set this option if you want to copy that furniture into stand-alone.


If ca/a3 is also set, then it is proxies are also added. Otherwise not.

  • Pause output

show the results of moveobject's renaming operations, rather than briefly flash the screen.



Architecture


MoveFolder provides the following tree architecture


Pdrive:\Any\Prefix\FolderOfP3d(s)


  • 'FolderOfP3ds' becomes the new pbo
  • Any\Prefix is your project and tag name

all p3d's must be in this root folder.


all sounds will be written to ~Sounds\


all rtm's will be written to ~Anims\


all sqx will be written to ~Scripts\


all textures and materials will be written to ~data\


MoveFolder attempts to copy the original pbo's architecture where possible. if the original rvmats were in data\rvmats, this app will place them similarly. if not, they go into the common ~data\ folder.


  • texture rules

MoveFolder considers pax, png or tga to be equivalent. it copies whichever of these files is found with the latest file date for unbinarised p3d's and copies only a pax for binarised.



config.cpp and bin


Creating new pbo's from just p3d content is not normally sufficient. configs which handle those p3d's normally have additional damage rvmats, picture= and icon= specifiers, along with sounds rtms and scripts. While these additional files are often only related to the p3d, there is nothing in the p3d that utilises them. Hence they wont be detected for transfer.


MoveFolder will create the necessary contents of a pbo folder simply by examining a config.cpp or config.bin sourced from some other folder.


For this mode of operation, all that is required is the config. (not p3d's)


Any and all file references detected in the config are copied over and massaged (with the usual options applying of 'move ca/a3' and 'move proxies'). This includes p3d's.


be aware that the end result is a NEW config.cpp in the target folder.


Independent config pbo


it is common practice for designers to separate their pbo's into ones containing p3ds and data, and one containing a config only, for those models.


the produced config.cpp can be transferred to any pbo the designer wishes. it is NOT prefix sensitive.



model.cfg via config.cpp


For unbinarised p3d's MoveFolder checks for the existence of a 'model.cfg' or a 'nameofmodel.cfg' in the same folder as the p3d


if present,it copies it to the root of the target folder.


there is a possibility of failure where two or more model.cfg's exist emanating from different p3d source folders



identical file names from sources


where a filename conflicts with the same name but from a diffferent source folder. example


ca\data\default.rvmat


ca\any\where\else\default.rvmat


a check is made for indentical content. If the same. the first file encountered is used as a substitute for the others.


where files are not identical they are labelled


cpy_<filename.ext>


eg


cpy_default.rvmat


This process is iterative.Where three files eg are from different sources, the results would be


default.rvmat


cpy_default.rvmat


cpy_cpy_default.rvmat



Islands


There is currently modest support for moving islands.


MoveFolder behaves slightly different for islands in that it assume you want to move the island and it is textures but NOT the p3d objects associated with it.


For this reason, p3d's are ignored when a wrp is detected


The only other difference is that textures and rvmats go into a ~layers\ folder. (pictures and icons described in a config.cpp still go into ~data\