Jump to content

E32 Profiles: Difference between revisions

From EDukeWiki
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 5: Line 5:
To the editors: Feel free to add content or notes, but please do not delete anything. (MediaWiki does contain a revision history, in any case.)
To the editors: Feel free to add content or notes, but please do not delete anything. (MediaWiki does contain a revision history, in any case.)


Each profile contains in essence tokens similar in function to the available command-line parameters. Profiles can be mixed and matched by modifying the cfg file once parsed, by passing command-line arguments, or in a GUI interface.
==Overview==
 
A profile is a unit describing a modification of some sort. Each profile contains in essence tokens similar in function to the available command-line parameters. Profiles can be mixed and matched by modifying the cfg file once parsed, by passing command-line arguments, or in a GUI interface.


Words formatted like "<u>this</u>" refer to the actual commands used in profiles.
Words formatted like "<u>this</u>" refer to the actual commands used in profiles.


==profile features==
==profile features==
*loaded from files with .e32 extension containing any number of profiles
*loaded from files with .e32 extension containing any number of "<u>profile</u>" entries
*toggle on/off
*each profile can be toggled on/off
*customizable load order
*customizable load order to the extent that tree hierarchy and "<u>depend</u>", "<u>conflict</u>", "<u>tie</u>", etc restrict
*utilizes def parser (Lua in future)
*command line switch <reference name> to enable profile entries (additive, but subject to changes by the program)
*if a profile is ever force-disabled due to a conflict, its previous on/off status is never lost
* data stored in .cfg for each profile, allowing non-GUI editing (cross-platform cop-out)
**load order
**reference name
**.e32 file name
**on/off state
*descriptive log output for final selections once game is initiated
 
===acquisition/loading of .e32 files===
 
'''This section needs more thought. Any and all input is welcome on the talk page.'''
 
*all *.e32 in entire subfolder tree of both main directory and any path directories will be parsed
*all *.e32 in entire subfolder tree of both main directory and any path directories will be parsed
*command line switch <filename> to install *.e32 (add to .cfg for parse)
*command line switch <filename> to install *.e32 (add to .cfg for parse)
*command line switch <reference name> to enable profiles (additive, but subject to changes by the program)
 
*utilizes def parser (Lua in future)
=== syntax ===
*"<u>name</u>" { }: two names, "<u>reference</u>" <name> and "<u>proper</u>" <display name>
*"<u>name</u>" { }: two names
**"<u>reference</u>" <technical_name>
**"<u>proper</u>" <Display Name>
*"<u>version</u>" <float>: for each mod, mutator, etc (possibly version checker/downloader?)
*"<u>version</u>" <float>: for each mod, mutator, etc (possibly version checker/downloader?)
*"<u>autoload</u>" flag: default on (HRP, music pack) vs. default off (mod)
*"<u>autoload</u>" flag: default on (HRP, music pack) vs. default off (mod)
*"<u>game</u>" <string>:  
*"<u>game</u>" <string>:  
**Some method of describing a set of supported EDuke32 games for which a mutator can run. An incomplete tree follows. In this example any bullet point can be used and all include any descendants. Naming is inexact and for illustration only.
**Some method of describing a set of supported EDuke32 games for which a profile can run.
**global
**Profiles not matching the current selection of the game tab are simply not shown.
***'''duke3d-based'''
**An incomplete tree follows. In this example any bullet point can be used and all include any descendants. Naming is inexact and for illustration only.
****''duke3d-family''
***global
*****duke3d
****'''Ken-BUILD (Test Game)'''
******duke3d shareware
****'''duke3d-based'''
*******duke3d shareware v0.99 beta
*****''duke3d-family''
*******duke3d shareware v1.0
******duke3d
*******duke3d shareware v1.1
*******duke3d shareware
*******duke3d shareware v1.3D
********duke3d shareware v0.99 beta
******duke3d registered
********duke3d shareware v1.0
*******duke3d registered v1.3D
********duke3d shareware v1.1
********duke3d registered v1.3D United States
********duke3d shareware v1.3D
********duke3d registered v1.3D South Korea
*******duke3d registered
*******duke3d registered v1.4/v1.5
********duke3d registered v1.3D
*****nam-based
*********duke3d registered v1.3D United States
******nam-family
*********duke3d registered v1.3D South Korea
*******nam
********duke3d registered v1.4/v1.5
*******napalm
*********duke3d_atomic_dukedc
******ww2gi
*********duke3d_atomic_nwinter
****''redneck-family''
*********duke3d_atomic_vacation
*****rr
******nam-based
*****rrra
*******nam-family
*****redneckdeerhuntin
********nam
****''paintbrawl''
********napalm
***'''sw'''
*******ww2gi
***'''blood'''
*****''redneck-family''
***'''tekwar'''
******rr
***'''exhumed-worldwide'''
******rrra
****''PowerSlave''
******redneckdeerhuntin
****''Exhumed''
*****''paintbrawl''
****''Seireki 1999: Pharaoh no Fukkatsu''
****'''sw'''
***'''witchaven-family'''
****'''blood'''
****''witchaven''
****'''tekwar'''
****''witchaven2''
****'''exhumed-worldwide'''
***'''corridor8'''
*****''PowerSlave''
***'''lo7p'''
*****''Exhumed''
***'''fate'''
*****''Seireki 1999: Pharaoh no Fukkatsu''
***'''Ken-BUILD (Test Game)'''
****'''witchaven-family'''
**profiles not matching the current selection of the game tab are simply not shown
*****''witchaven''
*****''witchaven2''
****'''corridor8'''
****'''lo7p'''
****'''fate'''
*"<u>commands</u>" { }: contains list of files/data to load
*"<u>commands</u>" { }: contains list of files/data to load
**"<u>basedir</u>" (-game_dir)
***Note: This changes the "Custom game content directory" in the startup window. Perhaps it should be a user setting, off-limits to mods.
**"<u>dir</u>" (-j)
**"<u>grp</u>"/"<u>zip</u>"/"<u>pk3</u>"/"<u>pk4</u>" (-g)
**"<u>con</u>" (-x)
**"<u>con</u>" (-x)
**"<u>def</u>" (-h)
**"<u>def</u>" (-h)
**"<u>conmodule</u>" (-mx)
**"<u>con_module</u>" (-mx)
**"<u>defmodule</u>" (-mh)
**"<u>def_module</u>" (-mh)
**"<u>grp</u>"/"<u>zip</u>"/"<u>pk3</u>" (-g)
**"<u>basedir</u>" (-game_dir)
**"<u>dir</u>" (-j)
**"<u>rts</u>" (-rts)
**"<u>rts</u>" (-rts)
**"<u>map</u>" (-map)
**"<u>map</u>" (-map)
**"<u>clipmap</u>" (-clipmap)
**"<u>clipmap</u>" (-clipmap)
**"<u>demo</u>" (-d)
**"<u>demo</u>" (-d)
*if a profile is ever force-disabled due to a conflict, its previous on/off status is never lost
*reference name, .e32 file name as passed to the game (absolute and relative accepted), and on/off parsed to .cfg in load order
*parse to cfg to allow for non-GUI editing (cross-platform cop-out)
*"<u>depend</u>" <profile>: the profile (or sub-profile) is disabled if the specified dependency is absent or off
*"<u>depend</u>" <profile>: the profile (or sub-profile) is disabled if the specified dependency is absent or off
*all top-level profiles automatically placed in load order immediately below all of their "<u>depend</u>" statements
*"<u>conflict</u>" <profile>: The profile will automatically turn off if the specified one is turned on. (example: XXX Pack vs. XXX Lite)
*"<u>conflict</u>" <profile>: The profile will automatically turn off if the specified one is turned on. (example: XXX Pack vs. XXX Lite)
*"<u>base</u>" flag: Only one profile with this flag can be on at a time. Useful for non-mutator base mods and TCs.
*"<u>base</u>" flag: Only one profile with this flag can be on at a time. Useful for non-mutator base mods and TCs.
*"<u>library</u>" flag: indicates that the profile is a mod library intended for reuse and mashups, such as independent monsters; disqualified from autoload and sub-profiles
*"<u>library</u>" flag: indicates that the profile is a mod library intended for reuse and mashups, such as independent monsters; disqualified from autoload and sub-profiles
*"<u>include</u>" <profile>: like a "<u>depend</u>" but specifically for "<u>library</u>" profiles; silent
*"<u>include</u>" <profile>: like a "<u>depend</u>" but specifically for "<u>library</u>" profiles; silent
*descriptive log output for selections


==sub-profile-specific features==
====sub-profile-specific features====
*displayed indented from the left immediately beneath parent
*displayed indented from the left immediately beneath parent
*sub-profile automatically "<u>depend</u>" on the parent
*sub-profile automatically "<u>depend</u>" on the parent
Line 92: Line 110:
**has the capability to allow more than one "<u>base</u>" flagged profile to run (the profile with the tie command is loaded after the specified profile)
**has the capability to allow more than one "<u>base</u>" flagged profile to run (the profile with the tie command is loaded after the specified profile)
**the idea is to reconcile compatibility between mutators that may need it
**the idea is to reconcile compatibility between mutators that may need it
**Always hidden from the GUI unless "verbose mode" is enabled


==implementation strategy==
==implementation strategy==
Line 111: Line 130:
     commands
     commands
     {
     {
         conmodule "conmodule.con"
         con_module "con_module.con"
         defmodule "defmodule.def"
         def_module "def_module.def"
     }
     }
   
   
Line 135: Line 154:
         reference "profile1_2"
         reference "profile1_2"
     }
     }
     subprofile "profile1"
     depend "profile1" // note how the first use of depend here makes it a sub-profile
  }
  }
   
   
Line 171: Line 190:
     commands
     commands
     {
     {
         conmodule "mymod_specialeffects.con"
         con_module "mymod_specialeffects.con"
         defmodule "mymod_new8bitart.def"
         def_module "mymod_new8bitart.def"
     }
     }
     profile
     profile
Line 184: Line 203:
         commands
         commands
         {
         {
             defmodule "mymod_hrp.def"
             def_module "mymod_hrp.def"
         }
         }
         tie "duke3d_hrp"
         tie "duke3d_hrp"
Line 206: Line 225:
         dir "vaca_plus"
         dir "vaca_plus"
         grp "vacation.grp"
         grp "vacation.grp"
         conmodule "Vacation.con"
         con_module "Vacation.con"
         defmodule "Vacation.def"
         def_module "Vacation.def"
     }
     }
   
   
Line 219: Line 238:
         commands
         commands
         {
         {
             conmodule "VacaDP.con"
             con_module "VacaDP.con"
             defmodule "VacaDP.def"
             def_module "VacaDP.def"
         }
         }
         tie "dukeplus"
         tie "dukeplus"
Line 234: Line 253:
         commands
         commands
         {
         {
             conmodule "VacaXXX.con"
             con_module "VacaXXX.con"
             defmodule "VacaXXX.def"
             def_module "VacaXXX.def"
         }
         }
         depend "xxx_pack"
         depend "xxx_pack"
Line 249: Line 268:
         commands
         commands
         {
         {
             defmodule "vacation_hrp.def"
             def_module "vacation_hrp.def"
         }
         }
   
   
Line 264: Line 283:
             commands
             commands
             {
             {
                 defmodule "vacation_hrp_xxx.def"
                 def_module "vacation_hrp_xxx.def"
             }
             }
             depend "vaca_plus_xxx"
             depend "vaca_plus_xxx"
Line 272: Line 291:


==GUI mockup==
==GUI mockup==
[[File:E32_profiles_mockup.png]]


This image is outdated in the following ways:
This image is outdated in the following ways:
*Ideally, the Duke Plus Extension and "HRP XXX" would be hidden and transparent to the user because they would be <u>tie</u>d to the mutator for which they are a compatibility layer anyway.
*Ideally, the Duke Plus Extension and "HRP XXX" would be hidden and transparent to the user because they would be <u>tie</u>d to the mutator for which they are a compatibility layer anyway.
[[File:E32_profiles_mockup.png]]


[[Category:Developer's corner]]
[[Category:Developer's corner]]

Latest revision as of 08:08, 28 November 2013