diff --git a/Package/Environment/Common/Collections/Arcade/Include.xml b/Package/Environment/Common/Collections/Arcade/Include.xml
deleted file mode 100644
index 0b7017d..0000000
--- a/Package/Environment/Common/Collections/Arcade/Include.xml
+++ /dev/null
@@ -1,749 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Package/Environment/Common/Collections/Arcade/Settings.conf b/Package/Environment/Common/Collections/Arcade/Settings.conf
index 341f7b6..f92d150 100644
--- a/Package/Environment/Common/Collections/Arcade/Settings.conf
+++ b/Package/Environment/Common/Collections/Arcade/Settings.conf
@@ -1,13 +1,48 @@
-# override the default layout with something else if desired
-#layout = Default
-launcher = MAME
+###############################################################################
+# The location of where your ROM items exist. Examples:
+# list.path = D:/ROMs/MAME (absolute path)
+# list.path = ../ROMs/MAME (relative path to root of FE dir)
+#
+# If BASE_ITEM_PATH=D:/ROMs and the name of this collection is named "Arcade"
+# then the configuration below will search in D:/ROMs/Arcade
+###############################################################################
+list.path = %BASE_ITEM_PATH%/%ITEM_COLLECTION_NAME%
-list.path = ../ROMs/MAME
+###############################################################################
+# Extensions are comma separated without spaces
+###############################################################################
list.extensions = zip
-media.video = ../Media/Arcade/Videos
-media.title = ../Media/Arcade/Titles
-media.snap = ../Media/Arcade/Snaps
-media.box = ../Media/Arcade/Boxes
-media.cart = ../Media/Arcade/Carts
+###############################################################################
+# The executable to run when an item in a collection item is selected
+###############################################################################
+launcher = MAME
+###############################################################################
+# On default, MAME roms are not clearly named. We need to use the MAME
+# metadata for them.
+###############################################################################
+metadata.type = MAME
+
+###############################################################################
+# Uncomment and edit the following line to override the global Settings layout
+###############################################################################
+# layout = Default
+
+###############################################################################
+# Media paths on default scan for artwork:
+# %BASE_MEDIA_PATH%/%ITEM_COLLECTION_NAME%/Video
+# %BASE_MEDIA_PATH%/%ITEM_COLLECTION_NAME%/Title
+# %BASE_MEDIA_PATH%/%ITEM_COLLECTION_NAME%/Snap
+# %BASE_MEDIA_PATH%/%ITEM_COLLECTION_NAME%/Box
+# %BASE_MEDIA_PATH%/%ITEM_COLLECTION_NAME%/Cart
+#
+# This is done to help enforce a consistent directory stucture and streamline
+# the configuration process. To individually override artwork, uncomment and
+# edit the lines below:
+###############################################################################
+# media.video = ../Media/%ITEM_COLLECTION_NAME%/Video
+# media.title = ../Media/%ITEM_COLLECTION_NAME%/Title
+# media.snap = ../Media/%ITEM_COLLECTION_NAME%/Snap
+# media.box = ../Media/%ITEM_COLLECTION_NAME%/Box
+# media.cart = ../Media/%ITEM_COLLECTION_NAME%/Cart
diff --git a/Package/Environment/Common/Collections/Main/Menu.xml b/Package/Environment/Common/Collections/Main/Menu.xml
index 1e9b9a9..5467c10 100644
--- a/Package/Environment/Common/Collections/Main/Menu.xml
+++ b/Package/Environment/Common/Collections/Main/Menu.xml
@@ -1,11 +1,4 @@
diff --git a/Package/Environment/Common/Collections/Main/Settings.conf b/Package/Environment/Common/Collections/Main/Settings.conf
index e7e4bc2..6b50e8c 100644
--- a/Package/Environment/Common/Collections/Main/Settings.conf
+++ b/Package/Environment/Common/Collections/Main/Settings.conf
@@ -1,9 +1,6 @@
-# override the default layout with something else if desired
+###############################################################################
+# This main collection is intended to be a menu for navigating to other
+# collections (although this can also be configured to list and launch items).
+# See Menu.xml to configure the menu
+###############################################################################
layout = Showcase 16x9
-
-media.video = ../Media/Systems/Videos
-media.title = ../Media/Systems/Titles
-media.box = ../Media/Systems/Boxes
-media.cart = ../Media/Systems/Carts
-media.snap = ../Media/Systems/Snaps
-
diff --git a/Package/Environment/Common/Collections/NES and Arcade/Menu.xml b/Package/Environment/Common/Collections/NES and Arcade/Menu.xml
deleted file mode 100644
index df54a3b..0000000
--- a/Package/Environment/Common/Collections/NES and Arcade/Menu.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/Package/Environment/Common/Collections/NES and Arcade/Settings.conf b/Package/Environment/Common/Collections/NES and Arcade/Settings.conf
deleted file mode 100644
index 5863137..0000000
--- a/Package/Environment/Common/Collections/NES and Arcade/Settings.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-# override the default layout with something else if desired
-# layout = SomeCustomBuiltTheme
-
-media.video = ../Media/Systems/Videos
-media.title = ../Media/Systems/Titles
-media.box = ../Media/Systems/Boxes
-media.cart = ../Media/Systems/Carts
-media.snap = ../Media/Systems/Snaps
-
diff --git a/Package/Environment/Common/Collections/Nintendo Entertainment System/Settings.conf b/Package/Environment/Common/Collections/Nintendo Entertainment System/Settings.conf
index 6b6725e..8b19b7b 100644
--- a/Package/Environment/Common/Collections/Nintendo Entertainment System/Settings.conf
+++ b/Package/Environment/Common/Collections/Nintendo Entertainment System/Settings.conf
@@ -1,13 +1,43 @@
-# override the default layout with something else if desired
-#layout = SomeNewLayout
+###############################################################################
+# The location of where your ROM items exist. Examples:
+# list.path = D:/ROMs/MAME (absolute path)
+# list.path = ../ROMs/MAME (relative path to root of FE dir)
+#
+# If BASE_ITEM_PATH=D:/ROMs and the name of this collection is named "Nintendo
+# Entertainment System" then the configuration below will search in
+# "D:/ROMs/Nintendo Entertainment System"
+###############################################################################
+list.path = %BASE_ITEM_PATH%/%ITEM_COLLECTION_NAME%
+
+###############################################################################
+# Extensions are comma separated without spaces
+###############################################################################
+list.extensions = zip
+
+###############################################################################
+# The executable to run when an item in a collection item is selected
+###############################################################################
launcher = Nestopia
-list.path = ../ROMs/Nintendo NES
-list.extensions = nes
-
-media.video = ../Media/Nintendo NES/Videos
-media.title = ../Media/Nintendo NES/Titles
-media.box = ../Media/Nintendo NES/Boxes
-media.cart = ../Media/Nintendo NES/Carts
-media.snap = ../Media/Nintendo NES/Snaps
+###############################################################################
+# Uncomment and edit the following line to override the global Settings layout
+###############################################################################
+# layout = Default
+###############################################################################
+# Media paths on default scan for artwork:
+# %BASE_MEDIA_PATH%/%ITEM_COLLECTION_NAME%/Video
+# %BASE_MEDIA_PATH%/%ITEM_COLLECTION_NAME%/Title
+# %BASE_MEDIA_PATH%/%ITEM_COLLECTION_NAME%/Snap
+# %BASE_MEDIA_PATH%/%ITEM_COLLECTION_NAME%/Box
+# %BASE_MEDIA_PATH%/%ITEM_COLLECTION_NAME%/Cart
+#
+# This is done to help enforce a consistent directory stucture and streamline
+# the configuration process. To individually override artwork, uncomment and
+# edit the lines below:
+###############################################################################
+# media.video = ../Media/%COLLECTION_NAME%/Video
+# media.title = ../Media/%COLLECTION_NAME%/Title
+# media.snap = ../Media/%COLLECTION_NAME%/Snap
+# media.box = ../Media/%COLLECTION_NAME%/Box
+# media.cart = ../Media/%COLLECTION_NAME%/Cart
diff --git a/Package/Environment/Common/Meta/Hyperlist/AAE.xml b/Package/Environment/Common/Meta/Hyperlist/AAE.xml
new file mode 100644
index 0000000..7181758
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/AAE.xml
@@ -0,0 +1,359 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/American Laser Games.xml b/Package/Environment/Common/Meta/Hyperlist/American Laser Games.xml
new file mode 100644
index 0000000..208a6ff
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/American Laser Games.xml
@@ -0,0 +1,79 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Amstrad GX4000.xml b/Package/Environment/Common/Meta/Hyperlist/Amstrad GX4000.xml
new file mode 100644
index 0000000..981506c
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Amstrad GX4000.xml
@@ -0,0 +1,259 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Atari 2600.xml b/Package/Environment/Common/Meta/Hyperlist/Atari 2600.xml
new file mode 100644
index 0000000..a194534
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Atari 2600.xml
@@ -0,0 +1,6489 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Atari 5200.xml b/Package/Environment/Common/Meta/Hyperlist/Atari 5200.xml
new file mode 100644
index 0000000..afcb2ac
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Atari 5200.xml
@@ -0,0 +1,729 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Atari 7800.xml b/Package/Environment/Common/Meta/Hyperlist/Atari 7800.xml
new file mode 100644
index 0000000..0d225b6
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Atari 7800.xml
@@ -0,0 +1,599 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Atari Jaguar.xml b/Package/Environment/Common/Meta/Hyperlist/Atari Jaguar.xml
new file mode 100644
index 0000000..50ed098
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Atari Jaguar.xml
@@ -0,0 +1,549 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Atari Lynx.xml b/Package/Environment/Common/Meta/Hyperlist/Atari Lynx.xml
new file mode 100644
index 0000000..1aa48d0
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Atari Lynx.xml
@@ -0,0 +1,759 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Bally Astrocade.xml b/Package/Environment/Common/Meta/Hyperlist/Bally Astrocade.xml
new file mode 100644
index 0000000..1a3f32b
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Bally Astrocade.xml
@@ -0,0 +1,489 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Bandai WonderSwan Color.xml b/Package/Environment/Common/Meta/Hyperlist/Bandai WonderSwan Color.xml
new file mode 100644
index 0000000..9198a6c
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Bandai WonderSwan Color.xml
@@ -0,0 +1,949 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Casio PV-1000.xml b/Package/Environment/Common/Meta/Hyperlist/Casio PV-1000.xml
new file mode 100644
index 0000000..221b25d
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Casio PV-1000.xml
@@ -0,0 +1,59 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/ColecoVision.xml b/Package/Environment/Common/Meta/Hyperlist/ColecoVision.xml
new file mode 100644
index 0000000..ecfc204
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/ColecoVision.xml
@@ -0,0 +1,1409 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Commodore Amiga CD32.xml b/Package/Environment/Common/Meta/Hyperlist/Commodore Amiga CD32.xml
new file mode 100644
index 0000000..682ee0f
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Commodore Amiga CD32.xml
@@ -0,0 +1,1639 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/DICE.xml b/Package/Environment/Common/Meta/Hyperlist/DICE.xml
new file mode 100644
index 0000000..536ff10
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/DICE.xml
@@ -0,0 +1,149 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Daphne.xml b/Package/Environment/Common/Meta/Hyperlist/Daphne.xml
new file mode 100644
index 0000000..2503e85
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Daphne.xml
@@ -0,0 +1,179 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Emerson Arcadia 2001.xml b/Package/Environment/Common/Meta/Hyperlist/Emerson Arcadia 2001.xml
new file mode 100644
index 0000000..1b38946
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Emerson Arcadia 2001.xml
@@ -0,0 +1,559 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Entex Adventure Vision.xml b/Package/Environment/Common/Meta/Hyperlist/Entex Adventure Vision.xml
new file mode 100644
index 0000000..a08ac75
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Entex Adventure Vision.xml
@@ -0,0 +1,49 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Fairchild Channel F.xml b/Package/Environment/Common/Meta/Hyperlist/Fairchild Channel F.xml
new file mode 100644
index 0000000..0e043ca
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Fairchild Channel F.xml
@@ -0,0 +1,309 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/GCE Vectrex.xml b/Package/Environment/Common/Meta/Hyperlist/GCE Vectrex.xml
new file mode 100644
index 0000000..2a8682f
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/GCE Vectrex.xml
@@ -0,0 +1,239 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/MAME.xml b/Package/Environment/Common/Meta/Hyperlist/MAME.xml
new file mode 100644
index 0000000..63b6f9d
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/MAME.xml
@@ -0,0 +1,91549 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/MUGEN.xml b/Package/Environment/Common/Meta/Hyperlist/MUGEN.xml
new file mode 100644
index 0000000..745d225
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/MUGEN.xml
@@ -0,0 +1,459 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Magnavox Odyssey 2.xml b/Package/Environment/Common/Meta/Hyperlist/Magnavox Odyssey 2.xml
new file mode 100644
index 0000000..f85f61e
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Magnavox Odyssey 2.xml
@@ -0,0 +1,999 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Mattel Intellivision.xml b/Package/Environment/Common/Meta/Hyperlist/Mattel Intellivision.xml
new file mode 100644
index 0000000..1a27419
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Mattel Intellivision.xml
@@ -0,0 +1,1419 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/NEC PC Engine-CD.xml b/Package/Environment/Common/Meta/Hyperlist/NEC PC Engine-CD.xml
new file mode 100644
index 0000000..015adc2
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/NEC PC Engine-CD.xml
@@ -0,0 +1,1189 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/NEC PC Engine.xml b/Package/Environment/Common/Meta/Hyperlist/NEC PC Engine.xml
new file mode 100644
index 0000000..6e6ba19
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/NEC PC Engine.xml
@@ -0,0 +1,1599 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/NEC PC-FX.xml b/Package/Environment/Common/Meta/Hyperlist/NEC PC-FX.xml
new file mode 100644
index 0000000..c7a4f57
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/NEC PC-FX.xml
@@ -0,0 +1,629 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/NEC SuperGrafx.xml b/Package/Environment/Common/Meta/Hyperlist/NEC SuperGrafx.xml
new file mode 100644
index 0000000..6bb5567
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/NEC SuperGrafx.xml
@@ -0,0 +1,59 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/NEC TurboGrafx-16.xml b/Package/Environment/Common/Meta/Hyperlist/NEC TurboGrafx-16.xml
new file mode 100644
index 0000000..a35e131
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/NEC TurboGrafx-16.xml
@@ -0,0 +1,949 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/NEC TurboGrafx-CD.xml b/Package/Environment/Common/Meta/Hyperlist/NEC TurboGrafx-CD.xml
new file mode 100644
index 0000000..68e2fa9
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/NEC TurboGrafx-CD.xml
@@ -0,0 +1,469 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Nintendo 64.xml b/Package/Environment/Common/Meta/Hyperlist/Nintendo 64.xml
new file mode 100644
index 0000000..812eb33
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Nintendo 64.xml
@@ -0,0 +1,3039 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Nintendo Entertainment System.xml b/Package/Environment/Common/Meta/Hyperlist/Nintendo Entertainment System.xml
new file mode 100644
index 0000000..08647fa
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Nintendo Entertainment System.xml
@@ -0,0 +1,7919 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Nintendo Famicom.xml b/Package/Environment/Common/Meta/Hyperlist/Nintendo Famicom.xml
new file mode 100644
index 0000000..2ac7a71
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Nintendo Famicom.xml
@@ -0,0 +1,2919 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Nintendo Game Boy Advance.xml b/Package/Environment/Common/Meta/Hyperlist/Nintendo Game Boy Advance.xml
new file mode 100644
index 0000000..50a308e
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Nintendo Game Boy Advance.xml
@@ -0,0 +1,11299 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Nintendo Game Boy Color.xml b/Package/Environment/Common/Meta/Hyperlist/Nintendo Game Boy Color.xml
new file mode 100644
index 0000000..9b02d41
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Nintendo Game Boy Color.xml
@@ -0,0 +1,5359 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Nintendo Game Boy.xml b/Package/Environment/Common/Meta/Hyperlist/Nintendo Game Boy.xml
new file mode 100644
index 0000000..2c7dbe4
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Nintendo Game Boy.xml
@@ -0,0 +1,5659 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Nintendo GameCube.xml b/Package/Environment/Common/Meta/Hyperlist/Nintendo GameCube.xml
new file mode 100644
index 0000000..2594ce7
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Nintendo GameCube.xml
@@ -0,0 +1,6389 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Nintendo Pokemon Mini.xml b/Package/Environment/Common/Meta/Hyperlist/Nintendo Pokemon Mini.xml
new file mode 100644
index 0000000..88c5c42
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Nintendo Pokemon Mini.xml
@@ -0,0 +1,119 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Nintendo Super Famicom.xml b/Package/Environment/Common/Meta/Hyperlist/Nintendo Super Famicom.xml
new file mode 100644
index 0000000..e246e9e
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Nintendo Super Famicom.xml
@@ -0,0 +1,5119 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Nintendo Virtual Boy.xml b/Package/Environment/Common/Meta/Hyperlist/Nintendo Virtual Boy.xml
new file mode 100644
index 0000000..98c68f8
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Nintendo Virtual Boy.xml
@@ -0,0 +1,209 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/OpenBOR.xml b/Package/Environment/Common/Meta/Hyperlist/OpenBOR.xml
new file mode 100644
index 0000000..168085d
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/OpenBOR.xml
@@ -0,0 +1,589 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Panasonic 3DO.xml b/Package/Environment/Common/Meta/Hyperlist/Panasonic 3DO.xml
new file mode 100644
index 0000000..a234a32
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Panasonic 3DO.xml
@@ -0,0 +1,2169 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Philips VG 5000.xml b/Package/Environment/Common/Meta/Hyperlist/Philips VG 5000.xml
new file mode 100644
index 0000000..7b550af
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Philips VG 5000.xml
@@ -0,0 +1,219 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/PopCap.xml b/Package/Environment/Common/Meta/Hyperlist/PopCap.xml
new file mode 100644
index 0000000..71ae951
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/PopCap.xml
@@ -0,0 +1,829 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/RCA Studio II.xml b/Package/Environment/Common/Meta/Hyperlist/RCA Studio II.xml
new file mode 100644
index 0000000..02746ce
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/RCA Studio II.xml
@@ -0,0 +1,59 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/SNK Neo Geo CD.xml b/Package/Environment/Common/Meta/Hyperlist/SNK Neo Geo CD.xml
new file mode 100644
index 0000000..803142d
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/SNK Neo Geo CD.xml
@@ -0,0 +1,909 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/SNK Neo Geo Pocket Color.xml b/Package/Environment/Common/Meta/Hyperlist/SNK Neo Geo Pocket Color.xml
new file mode 100644
index 0000000..ea0e408
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/SNK Neo Geo Pocket Color.xml
@@ -0,0 +1,409 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/SNK Neo Geo.xml b/Package/Environment/Common/Meta/Hyperlist/SNK Neo Geo.xml
new file mode 100644
index 0000000..8caa4b6
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/SNK Neo Geo.xml
@@ -0,0 +1,1409 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sammy Atomiswave.xml b/Package/Environment/Common/Meta/Hyperlist/Sammy Atomiswave.xml
new file mode 100644
index 0000000..02825cf
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sammy Atomiswave.xml
@@ -0,0 +1,239 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/ScummVM.xml b/Package/Environment/Common/Meta/Hyperlist/ScummVM.xml
new file mode 100644
index 0000000..e3154d3
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/ScummVM.xml
@@ -0,0 +1,2079 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sega 32X.xml b/Package/Environment/Common/Meta/Hyperlist/Sega 32X.xml
new file mode 100644
index 0000000..b621045
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sega 32X.xml
@@ -0,0 +1,339 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sega CD.xml b/Package/Environment/Common/Meta/Hyperlist/Sega CD.xml
new file mode 100644
index 0000000..d93494f
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sega CD.xml
@@ -0,0 +1,1719 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sega Dreamcast.xml b/Package/Environment/Common/Meta/Hyperlist/Sega Dreamcast.xml
new file mode 100644
index 0000000..f5602d3
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sega Dreamcast.xml
@@ -0,0 +1,3479 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sega Game Gear.xml b/Package/Environment/Common/Meta/Hyperlist/Sega Game Gear.xml
new file mode 100644
index 0000000..8f70baf
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sega Game Gear.xml
@@ -0,0 +1,2599 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sega Genesis.xml b/Package/Environment/Common/Meta/Hyperlist/Sega Genesis.xml
new file mode 100644
index 0000000..80e79e2
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sega Genesis.xml
@@ -0,0 +1,7819 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sega Master System.xml b/Package/Environment/Common/Meta/Hyperlist/Sega Master System.xml
new file mode 100644
index 0000000..1f4b8d8
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sega Master System.xml
@@ -0,0 +1,2789 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sega Model 2.xml b/Package/Environment/Common/Meta/Hyperlist/Sega Model 2.xml
new file mode 100644
index 0000000..2bf06cd
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sega Model 2.xml
@@ -0,0 +1,569 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sega Model 3.xml b/Package/Environment/Common/Meta/Hyperlist/Sega Model 3.xml
new file mode 100644
index 0000000..475f422
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sega Model 3.xml
@@ -0,0 +1,239 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sega Naomi.xml b/Package/Environment/Common/Meta/Hyperlist/Sega Naomi.xml
new file mode 100644
index 0000000..ad7e306
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sega Naomi.xml
@@ -0,0 +1,1749 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sega SG-1000.xml b/Package/Environment/Common/Meta/Hyperlist/Sega SG-1000.xml
new file mode 100644
index 0000000..222ac16
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sega SG-1000.xml
@@ -0,0 +1,739 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sega ST-V.xml b/Package/Environment/Common/Meta/Hyperlist/Sega ST-V.xml
new file mode 100644
index 0000000..ddccf77
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sega ST-V.xml
@@ -0,0 +1,619 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Sega Saturn.xml b/Package/Environment/Common/Meta/Hyperlist/Sega Saturn.xml
new file mode 100644
index 0000000..c322a72
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Sega Saturn.xml
@@ -0,0 +1,3039 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Super Nintendo Entertainment System.xml b/Package/Environment/Common/Meta/Hyperlist/Super Nintendo Entertainment System.xml
new file mode 100644
index 0000000..44b07f3
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Super Nintendo Entertainment System.xml
@@ -0,0 +1,7879 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Tiger Game.com.xml b/Package/Environment/Common/Meta/Hyperlist/Tiger Game.com.xml
new file mode 100644
index 0000000..b44835f
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Tiger Game.com.xml
@@ -0,0 +1,209 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Touhou Project.xml b/Package/Environment/Common/Meta/Hyperlist/Touhou Project.xml
new file mode 100644
index 0000000..f1266f8
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Touhou Project.xml
@@ -0,0 +1,249 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/VTech CreatiVision.xml b/Package/Environment/Common/Meta/Hyperlist/VTech CreatiVision.xml
new file mode 100644
index 0000000..694ed4d
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/VTech CreatiVision.xml
@@ -0,0 +1,179 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/WoW Action Max.xml b/Package/Environment/Common/Meta/Hyperlist/WoW Action Max.xml
new file mode 100644
index 0000000..8bb867c
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/WoW Action Max.xml
@@ -0,0 +1,59 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Meta/Hyperlist/Zinc.xml b/Package/Environment/Common/Meta/Hyperlist/Zinc.xml
new file mode 100644
index 0000000..497f000
--- /dev/null
+++ b/Package/Environment/Common/Meta/Hyperlist/Zinc.xml
@@ -0,0 +1,469 @@
+
+
\ No newline at end of file
diff --git a/Package/Environment/Common/Settings.conf b/Package/Environment/Common/Settings.conf
index 9db1413..0581be9 100644
--- a/Package/Environment/Common/Settings.conf
+++ b/Package/Environment/Common/Settings.conf
@@ -47,3 +47,9 @@ attractModeTime = 45
#######################################
# do not set to "yes" unless you want your hard drive to quickly fill up
debug.logfps = no
+
+#######################################
+# Base folders of media and ROM files
+#######################################
+baseMediaPath=../Media
+baseItemPath=../ROMs
diff --git a/RetroFE/Source/CMakeLists.txt b/RetroFE/Source/CMakeLists.txt
index c1b5f1e..d7084a4 100644
--- a/RetroFE/Source/CMakeLists.txt
+++ b/RetroFE/Source/CMakeLists.txt
@@ -79,10 +79,9 @@ set(RETROFE_HEADERS
"${RETROFE_DIR}/Source/Collection/Item.h"
"${RETROFE_DIR}/Source/Collection/MenuParser.h"
"${RETROFE_DIR}/Source/Control/UserInput.h"
- "${RETROFE_DIR}/Source/Database/CollectionDatabase.h"
"${RETROFE_DIR}/Source/Database/Configuration.h"
"${RETROFE_DIR}/Source/Database/DB.h"
- "${RETROFE_DIR}/Source/Database/MamelistMetadata.h"
+ "${RETROFE_DIR}/Source/Database/MetadataDatabase.h"
"${RETROFE_DIR}/Source/Execute/AttractMode.h"
"${RETROFE_DIR}/Source/Execute/Launcher.h"
"${RETROFE_DIR}/Source/Graphics/Animate/Tween.h"
@@ -122,10 +121,9 @@ set(RETROFE_SOURCES
"${RETROFE_DIR}/Source/Collection/Item.cpp"
"${RETROFE_DIR}/Source/Collection/MenuParser.cpp"
"${RETROFE_DIR}/Source/Control/UserInput.cpp"
- "${RETROFE_DIR}/Source/Database/CollectionDatabase.cpp"
"${RETROFE_DIR}/Source/Database/Configuration.cpp"
"${RETROFE_DIR}/Source/Database/DB.cpp"
- "${RETROFE_DIR}/Source/Database/MamelistMetadata.cpp"
+ "${RETROFE_DIR}/Source/Database/MetadataDatabase.cpp"
"${RETROFE_DIR}/Source/Execute/AttractMode.cpp"
"${RETROFE_DIR}/Source/Execute/Launcher.cpp"
"${RETROFE_DIR}/Source/Graphics/Animate/Tween.cpp"
diff --git a/RetroFE/Source/Collection/CollectionInfo.cpp b/RetroFE/Source/Collection/CollectionInfo.cpp
index b4fee86..61b5308 100644
--- a/RetroFE/Source/Collection/CollectionInfo.cpp
+++ b/RetroFE/Source/Collection/CollectionInfo.cpp
@@ -14,6 +14,7 @@
* along with RetroFE. If not, see .
*/
#include "CollectionInfo.h"
+#include "Item.h"
#include "../Database/Configuration.h"
#include
@@ -32,6 +33,14 @@ CollectionInfo::CollectionInfo(std::string name,
CollectionInfo::~CollectionInfo()
{
+ std::vector- ::iterator it = Items.begin();
+
+ while(it != Items.end())
+ {
+ delete *it;
+ Items.erase(it);
+ it = Items.begin();
+ }
}
std::string CollectionInfo::GetName() const
@@ -74,6 +83,10 @@ void CollectionInfo::GetExtensions(std::vector &extensions)
extensions.push_back(token);
}
}
+std::vector
- *CollectionInfo::GetItems()
+{
+ return &Items;
+}
diff --git a/RetroFE/Source/Collection/CollectionInfo.h b/RetroFE/Source/Collection/CollectionInfo.h
index 9f5750e..c3d2d4b 100644
--- a/RetroFE/Source/Collection/CollectionInfo.h
+++ b/RetroFE/Source/Collection/CollectionInfo.h
@@ -6,6 +6,8 @@
#include
#include
+class Item;
+
class CollectionInfo
{
public:
@@ -17,6 +19,7 @@ public:
std::string GetMetadataType() const;
std::string GetMetadataPath() const;
std::string GetExtensions() const;
+ std::vector
- *GetItems();
void GetExtensions(std::vector &extensions);
private:
@@ -25,4 +28,5 @@ private:
std::string Extensions;
std::string MetadataType;
std::string MetadataPath;
+ std::vector
- Items;
};
diff --git a/RetroFE/Source/Collection/CollectionInfoBuilder.cpp b/RetroFE/Source/Collection/CollectionInfoBuilder.cpp
index 41138be..c816296 100644
--- a/RetroFE/Source/Collection/CollectionInfoBuilder.cpp
+++ b/RetroFE/Source/Collection/CollectionInfoBuilder.cpp
@@ -15,86 +15,28 @@
*/
#include "CollectionInfoBuilder.h"
#include "CollectionInfo.h"
+#include "Item.h"
#include "../Database/Configuration.h"
+#include "../Database/MetadataDatabase.h"
+#include "../Database/DB.h"
#include "../Utility/Log.h"
+#include "../Utility/Utils.h"
+#include
#include
#include
-CollectionInfoBuilder::CollectionInfoBuilder(Configuration &c)
+CollectionInfoBuilder::CollectionInfoBuilder(Configuration &c, MetadataDatabase &mdb)
: Conf(c)
+ , MetaDB(mdb)
{
}
CollectionInfoBuilder::~CollectionInfoBuilder()
{
- std::map::iterator it = InfoMap.begin();
-
- for(it == InfoMap.begin(); it != InfoMap.end(); ++it)
- {
- delete it->second;
- }
-
- InfoMap.clear();
}
-bool CollectionInfoBuilder::LoadAllCollections()
+CollectionInfo *CollectionInfoBuilder::BuildCollection(std::string name)
{
- std::vector collections;
-
- Conf.GetChildKeyCrumbs("collections", collections);
-
- if(collections.size() == 0)
- {
- Logger::Write(Logger::ZONE_ERROR, "Collections", "No collections were found. Please configure Settings.conf");
- return false;
- }
-
- bool retVal = true;
- std::vector::iterator it;
-
- for(it = collections.begin(); it != collections.end(); ++it)
- {
- // todo: There is nothing that should really stop us from creating a collection
- // in the main folder. I just need to find some time to look at the impacts if
- // I remove this conditional check.
- if(*it != "Main")
- {
- std::string oldCollection = Conf.GetCurrentCollection();
- Conf.SetCurrentCollection(*it);
- if(ImportCollection(*it))
- {
- Logger::Write(Logger::ZONE_INFO, "Collections", "Adding collection " + *it);
- }
- else
- {
- // Continue processing the rest of the collections if an error occurs during import.
- // ImportCollection() will print out an error to the log file.
- retVal = false;
- }
- Conf.SetCurrentCollection(oldCollection);
- }
- }
-
- return retVal;
-}
-
-void CollectionInfoBuilder::GetCollections(std::vector &collections)
-{
- std::map::iterator InfoMapIt;
-
- for(InfoMapIt = InfoMap.begin(); InfoMapIt != InfoMap.end(); ++InfoMapIt)
- {
- collections.push_back(InfoMapIt->second);
- }
-}
-
-bool CollectionInfoBuilder::ImportCollection(std::string name)
-{
- // create a new instance if one does not exist
- if(InfoMap.find(name) != InfoMap.end())
- {
- return true;
- }
std::string listItemsPathKey = "collections." + name + ".list.path";
std::string listFilterKey = "collections." + name + ".list.filter";
std::string extensionsKey = "collections." + name + ".list.extensions";
@@ -107,7 +49,7 @@ bool CollectionInfoBuilder::ImportCollection(std::string name)
std::string listItemsPath;
std::string launcherName;
std::string extensions;
- std::string metadataType;
+ std::string metadataType = name;
std::string metadataPath;
Conf.GetCollectionAbsolutePath(name, listItemsPath);
@@ -128,7 +70,87 @@ bool CollectionInfoBuilder::ImportCollection(std::string name)
Logger::Write(Logger::ZONE_WARNING, "Collections", ss.str());
}
- InfoMap[name] = new CollectionInfo(name, listItemsPath, extensions, metadataType, metadataPath);
+ CollectionInfo *collection = new CollectionInfo(name, listItemsPath, extensions, metadataType, metadataPath);
+ std::vector
- *list = collection->GetItems();
- return (InfoMap[name] != NULL);
+ ImportDirectory(collection);
+
+ return collection;
}
+
+bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info)
+{
+ DIR *dp;
+ struct dirent *dirp;
+ std::string path = info->GetListPath();
+ std::map includeFilter;
+ std::map excludeFilter;
+ bool retVal = true;
+ std::string includeFile = Configuration::GetAbsolutePath() + "/Collections/" + info->GetName() + "/Include.txt";
+ std::string excludeFile = Configuration::GetAbsolutePath() + "/Collections/" + info->GetName() + "/Exclude.txt";
+ std::string launcher;
+
+ (void)Conf.GetProperty("collections." + info->GetName() + ".launcher", launcher);
+
+ dp = opendir(path.c_str());
+ std::vector extensions;
+ info->GetExtensions(extensions);
+ std::vector::iterator extensionsIt;
+
+ if(dp == NULL)
+ {
+ Logger::Write(Logger::ZONE_ERROR, "CollectionInfoBuilder", "Could not read directory \"" + path + "\"");
+ //todo: store into a database
+ }
+ else
+ {
+ while((dirp = readdir(dp)) != NULL)
+ {
+ std::string file = dirp->d_name;
+
+ Utils::NormalizeBackSlashes(file);
+ size_t position = file.find_last_of(".");
+ std::string basename = (std::string::npos == position)? file : file.substr(0, position);
+
+ if((includeFilter.size() == 0 || includeFilter.find(basename) != includeFilter.end()) &&
+ (excludeFilter.size() == 0 || excludeFilter.find(basename) == excludeFilter.end()))
+ {
+ for(extensionsIt = extensions.begin(); extensionsIt != extensions.end(); ++extensionsIt)
+ {
+ std::string comparator = "." + *extensionsIt;
+ int start = file.length() - comparator.length() + 1;
+
+ if(start >= 0)
+ {
+ if(file.compare(start, comparator.length(), *extensionsIt) == 0)
+ {
+ Item *i = new Item();
+ i->SetName(basename);
+ i->SetFullTitle(basename);
+ i->SetTitle(basename);
+ i->SetLauncher(launcher);
+ info->GetItems()->push_back(i);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ MetaDB.InjectMetadata(info);
+
+ while(includeFilter.size() > 0)
+ {
+ std::map::iterator it = includeFilter.begin();
+ delete it->second;
+ includeFilter.erase(it);
+ }
+ while(excludeFilter.size() > 0)
+ {
+ std::map::iterator it = excludeFilter.begin();
+ delete it->second;
+ excludeFilter.erase(it);
+ }
+
+ return true;
+}
\ No newline at end of file
diff --git a/RetroFE/Source/Collection/CollectionInfoBuilder.h b/RetroFE/Source/Collection/CollectionInfoBuilder.h
index f512bcf..5ab9c9b 100644
--- a/RetroFE/Source/Collection/CollectionInfoBuilder.h
+++ b/RetroFE/Source/Collection/CollectionInfoBuilder.h
@@ -3,6 +3,7 @@
*/
#pragma once
+#include "../Database/MetadataDatabase.h"
#include
#include