-
Posts
422 -
Joined
-
Last visited
Content Type
Forums
Events
Downloads
Store
Development Tracking
HyperCL
Posts posted by billyc999
-
-
yea i think when i parsed the original xmls it had manufacturer and this became publisher in the ods files, i did find quite a few of these to be wrong compared to moby/gamefaqs. i gotta admit when i was making them i was basically just zoned like a robot, i knew where the info was on screen and without looking id be copy & pasting, hence how i got so much done
@dark yea that would be great , i tried figuring which parts of the textures make the real aeon nox theme but, damn thats a nightmare as im sure they are made up of several parts overlayed
hopefully soon i can start back on adding info to zx spectrum,c64,cpc and atari st although these wont be full sets as i narrowed mine down on these platforms
this is what your theme looks like upto now in LB
**edit** ESRB ratings arent changed yet so no icon shows up
-
@dark13 yea any psds would be great, ive been working on a few views 1 based on one of you psd files but if you have any more styles of aeon nox or anyother style it would be great to use them ... mentioned your name in the guidance thread and will credit you in the theme thread when i have everything ready.
regarding the osd files, im not sure whats upto date as i havent worked on them for a while due to me converting all the data for LB
as for using them to convert i can send you one of the small xml files for you to look at but i dont think they are of any use for aeon nox theme in Hyperspin due to dates, also the ratings will be slightly different LB uses the Style E- Everyone, T - Teen, ect to show the ratings graphics, the actual data thats shown onscreen is just taken from the osd files ie developer, rating, year, genre, info, and players
-
@Orphen92, i have'nt started the theme yet, im just looking into how xaml works
@Trnzaddict, the way i did it was add games to launchbox then close it. copy the xml to your desktop
then copy and paste the text in xml to csv convertor online, you then can save it as txt and rename the extension to csv
from there i use a macro to add the missing columns and then sort the order by application path and as long as you have the same games as the ods/csv files i cretaed you can just copy and paste the columns into the newely created csv to fill it out. at this point you should have 26 columns in the csv in column (M) you need to select it the got to find & replace regex FIND .* REPLACE &-01-01T08:00:00+01:00 <needed for LB time structure, also do a find and replace for & to &
in column 27 row 1
i use the formula
=CONCATENATE("<Game> <ApplicationPath>";A1;"</ApplicationPath> <Completed>";B1;"</Completed> <DateAdded>";C1;"</DateAdded> <DateModified>";D1;"</DateModified> <Developer>";E1;"</Developer> <Emulator>";F1;"</Emulator> <Favorite>";G1;"</Favorite> <ID>";H1;"</ID> <Notes>";I1;"</Notes> <Platform>";J1;"</Platform> <Publisher>";K1;"</Publisher> <Rating>";L1;"</Rating> <ReleaseDate>";M1;"</ReleaseDate> <ScummVMAspectCorrection>";N1;"</ScummVMAspectCorrection> <ScummVMFullscreen>";O1;"</ScummVMFullscreen> <StarRating>";P1;"</StarRating> <Status>";Q1;"</Status> <Title>";R1;"</Title> <UseDosBox>";S1;"</UseDosBox> <UseScummVM>";T1;"</UseScummVM> <PlayMode>";U1;"</PlayMode> <PlayCount>";V1;"</PlayCount> <Portable>";W1;"</Portable> <Hide>";X1;"</Hide> <Broken>";Y1;"</Broken> <Genre>";Z1;"</Genre> </Game>")
any questions if you get stuck, hit me up at launchbox forums
@zorg2000k yea love what jasons doing with LB , i still want to have Hs installed but will come back to it when its updated
-
Hey how's everyone doing, been reading the last couple of pages of the thread, seems there's been some changes.
i've been working on fixing up my systems in Launchbox, which i've swapped to now. just installing visual studio in the hope i can replicate the aeon nox main menu theme, eventually when HS gets updated id like to add it back so i can have both FE's on my system.
i also converted all my csv files into launchbox xml files so i have the data sorted for most part
-
there should be a download under unsorted submissions/themes/pre sort/dark13 I think
-
Uploaded CSV Database Info Editor
http://www.hyperspin-fe.com/files/file/11783-csv-database-info-editor/
-
3
-
-
font is bebas neue I think
-
I think its on the ftp, but I'm not 100% sure
-
-
1
-
-
added filemove lines to correct names to mobygames xml files
added file as download as code tags add numbers
rename extension ahk
-
the only thing that is needed at the moment is all HS databases converted to csv , I think Teedub is going to do them as I think he as a method to batch them.
here's the code if you want to try it out you will need to run it from within a folder and download the csv files from git and place in a folder called CSVFILES then run the ahk and press F5 (wait a little until the upper right listview populates) this downloads all the scraper information from mobygames.
by default all checkboxes are ticked (this prevents the moby scraper adding the information to the edit fields) just untick any field you want to scrape
#NoEnv SetBatchLines, -1 OnExit("KillIE") ; Dialog Box Gui, Dialog:New, -SysMenu +AlwaysOnTop, Wrong Link Gui, Dialog:Add, Combobox, vGameLink Gui, Dialog:Add, Button, Default gDialogProceed, Continue ; Predefined values ---------------------------------------------------------------------------------------------------------------- GuiTitle := "Game Info Editor" ; main Gui title FileDir := A_ScriptDir . "\CSVFILES" ; path of the folder containing the files ;FileDir := "C:\Users\"A_UserName "\Google Drive\Csv Files" ; path of the folder containing the files for google drive DataDir := ".\Data" FileEncoding, UTF-8 Separator := ">" ; field separator NumOfFields := 10 ; number of fields in the game records FieldNames := ["Rom Name" ; array of field names for the game record, adjust them to your needs , "Game Name" , "Year" , "Rating" , "Publisher" , "Developer" , "Genre" , "Score" , "Number Of Players" , "Description"] FieldOptions := ["Disabled" ; special Gui options for the edit fields, adjust them to your needs , "" , "" , "" , "" , "" , "" , "" , "" , "r10" , "" , ""] LVW := 300 ; width of the ListView controls EDW := 500 ; width of the Edit controls CurrentFields := [], GameArray := {} ; Get the height of a single-line edit control ------------------------------------------------------------------------------------- Gui, New Gui, Add, Edit, vDummy, Dummy GuiControlGet, Dummy, Pos EDH := DummyH Gui, Destroy ; GUI ------------------------------------------------------------------------------------------------------------------------------ Gui, 1:New, , %GuiTitle% Gui, font, s13, Arial Gui, Margin, 20, 10 ; Create and populate the FileLV Gui, Add, ListView, w%LVW% r10 Sort -Multi vFileLV gSubFileLV, File Name Loop, Files, %FileDir%\*.csv LV_Add("", A_LoopFileName) ; Create the GameLV Gui, Add, ListView, w%LVW% h300 r10 Sort -Multi vGameLV gSubGameLV AltSubmit, % FieldNames[1] ; Add the text and edit fields for the game records TXY := "ym" Loop, %NumOfFields% { Gui, Add, Checkbox, Checked Section %TXY% vCH%A_Index% h%EDH%, % FieldNames[A_Index] ;Gui, Add, Text, xp+15 h%EDH% +0x200, % FieldNames[A_Index] Options := FieldOptions[A_Index] ; special field options Gui, Add, Edit, y+2 w%EDW% %Options% vED%A_Index% gSubEditChanged +ReadOnly TXY := "y+2" } ; Create and populate the MobySysLV Gui, Add, ListView, ym w%LVW% r10 Sort -Multi vMobySysLV gSubMobySysLV, System Name Loop, Files, %DataDir%\*.xml LV_Add("", A_LoopFileName) ; Create the MobyGameLV Gui, Add, ListView, w%LVW% r10 Sort -Multi vMobyGameLV gSubMobyGameLV AltSubmit, % FieldNames[1] ; Add the action buttons BC := 4 ; button count BW := 100 ; button width DX := (EDW - (BW * BC)) // (BC - 1) ; space between butons Gui, Add, Button, xs w%BW% vEditBtn gSubEditBtn, Edit Gui, Add, Button, x+%DX% yp wp Disabled vSaveBtn gSubSaveBtn, Save Gui, Add, Button, x+%DX% yp wp Disabled vCancelBtn gSubCancelBtn, Cancel Gui, Add, Button, x+%DX% yp wp gSubSearch , Google ;------add background image here--------------------------------------------------------- ; Adjust the height of GameLV GuiControlGet, L, Pos, MobyGameLV GuiControlGet, L, Pos, GameLV GuiControlGet, B, Pos, CancelBtn LVH := BH + BY - LY GuiControl, Move, GameLV, h%LVH% GuiControl, Move, MobyGameLV, h%LVH% ; Show the GUI Gui, Show Editing := False Gui, Dialog:+Owner Return F5::Goto, SubScrapeBtn GuiClose: ExitApp ; File LV label -------------------------------------------------------------------------------------------------------------------- SubFileLV: Gui, ListView, FileLV ; set the default ListView if(A_GuiEvent = "DoubleClick") && (A_EventInfo) && (LV_GetNext() = A_EventInfo) { ; double-click on an item LV_GetText(CurrentFile, A_EventInfo) PopulateGameLV(CurrentFile) GuiControl, Focus, GameLV ;LV_Modify(1, "Select") } Return PopulateFileLV(){ Global Gui, ListView, FileLV LV_Delete() GuiControl, -ReDraw, FileLV ; stop redrawing Loop, Files, %FileDir%\*.csv LV_Add("", A_LoopFileName) Loop, 2 { ; adjust the column width LV_ModifyCol(A_Index, "AutoHdr") } GuiControl, +Redraw, FileLV ; redraw the ListView } PopulateGameLV(FileName){ Global Gui, ListView, GameLV ; change the default ListView LV_Delete() GuiControl, -ReDraw, GameLV ; stop redrawing FileRead, CurrentContent, %FileDir%\%FileName% GameArray := [] Loop, Parse, CurrentContent, `n, `r { If (A_LoopField) { Fields := StrSplit(A_LoopField, Separator) ; creates a real array of fields (AHK arrays start with index 1) GameID := Fields[2] ; use the first field as the unique ID for the game LV_Add("", GameID) ; add GameID GameArray[GameID] := Fields ; use GameID as key for GameArray } } Loop, 2 { ; adjust the column width LV_ModifyCol(A_Index, "AutoHdr") } GuiControl, +Redraw, GameLV ; redraw the ListView } ; Game LV label -------------------------------------------------------------------------------------------------------------------- SubGameLV: Gui, ListView, GameLV ; set the default ListView if(A_GuiEvent == "I")&& Instr(ErrorLevel, "S", 1) { ; a new item has been selected LV_GetText(CurrentGame, A_EventInfo) CurrentFields := GameArray[CurrentGame].Clone() ; retrieve the fields of the selected game from GameArray Loop, %NumOfFields% { ; update the edit fields GuiControl, , ED%A_Index%, % RegExReplace(CurrentFields[A_Index], "¤", "`n") } } Return SubMobySysLV: Gui, ListView, MobySysLV ; set the default ListView if(A_GuiEvent = "DoubleClick") && (A_EventInfo) { ; double-click on an item LV_GetText(MobyFileName, A_EventInfo) ;SplitPath, MobyFileName, , , , FileName ;PopulateGameLV(MobyFileName ".csv") Gui, ListView, MobyGameLV ; change the default ListView LV_Delete() GuiControl, -ReDraw, MobyGameLV ; stop redrawing FileRead, CurrentContent, %DataDir%\%MobyFileName% MobyArray := [] ; initialize a real array to hold the lines Loop, Parse, CurrentContent, `n, `r { RegExMatch(A_LoopField, "(?<=<loc>).*?(?=</loc>)", URL) if(URL) { SplitPath, URL, GameID GameID := Format("{:T}", RegExReplace(GameID, "(_|-)+", " ")) LV_Add("", GameID) ; add GameID MobyArray[GameID] := URL ; use GameID as key for MobyArray } } Loop, 2 ; adjust the column width LV_ModifyCol(A_Index, "AutoHdr") GuiControl, +Redraw, MobyGameLV ; redraw the ListView GuiControl, Focus, MobyGameLV ;LV_Modify(1, "Select") } Return PopulateMobySysLV(){ Global Gui, ListView, MobySysLV LV_Delete() GuiControl, -ReDraw, MobySysLV ; stop redrawing Loop, Files, %DataDir%\*.xml { LV_Add("", A_LoopFileName) } Loop, 2 { ; adjust the column width LV_ModifyCol(A_Index, "AutoHdr") } GuiControl, +Redraw, MobySysLV ; redraw the ListView } ; Game LV label -------------------------------------------------------------------------------------------------------------------- SubMobyGameLV: Gui, ListView, MobyGameLV ; set the default ListView If (A_GuiEvent == "I") && Instr(ErrorLevel, "S", 1) { ; a new item has been selected LV_GetText(CurrentMobyGame, A_EventInfo) Navigate(MobyArray[CurrentMobyGame]) Title := WB.document.getElementsByClassName("niceHeaderTitle")[0].getElementsByTagName("a")[0].innerText coreGameRelease := RegExReplace(WB.document.getElementById("coreGameRelease").innerText, "(`n|`r)+", "`n") coreGameGenre := RegExReplace(WB.document.getElementById("coreGameGenre").innerText, "(`n|`r)+", "`n") coreGameRank := RegExReplace(WB.document.getElementById("coreGameRank").innerText, "(`n|`r)+", "`n") RegExMatch(coreGameRelease, "(?<=Published by`n)[^`n]*", Publisher) RegExMatch(coreGameRelease, "(?<=Developed by`n)[^`n]*", Developer) RegExMatch(coreGameRelease, "(?<=Released`n)[^`n]*", Released) RegExMatch(coreGameGenre, "(?<=ESRB Rating`n)[^`n]*", Rating) RegExMatch(coreGameGenre, "(?<=Genre`n)[^`n]*", Genre) RegExMatch(coreGameRank, "\d*(?=`nCritic Score)", Critic) RegExMatch(coreGameRank, "(\d|\.)*(?=`nUser Score)", User) RegExMatch(WB.document.getElementsByClassName("col-md-8 col-lg-8")[0].innerText, "s)(?<=Description`r`n).*?(?=\s+\[edit description)", Description) Navigate(MobyArray[CurrentMobyGame] "/techinfo") techInfo := RegExReplace(WB.document.getElementsByClassName("techInfo")[0].innerText, "(`n|`r)+", "`n") RegExMatch(techInfo, "(?<=Number of Players Supported)[^`n`r]*", Players) Gui, Submit, NoHide UpdateField(2, Title) UpdateField(3, Released) UpdateField(4, Rating) UpdateField(5, Publisher) UpdateField(6, Developer) UpdateField(7, Genre) UpdateField(8, User) UpdateField(9, Players) UpdateField(10, Description) if(Title){ ;PopulateGameLV(MobyFileName ".csv") ;CurrentFile := MobyFileName Goto, SubEditBtn Goto, SubEditChanged } } Return UpdateField(index, text){ GuiControlGet, bool, , CH%index% if(!bool) { GuiControl, , ED%index%, % text ? text : "..." } } Navigate(url){ Global WB if(!WB){ WB := ComObjCreate("InternetExplorer.Application") ;WB.Visible := True ;Sleep, 100 WB.Visible := False } WB.Navigate(url) While, WB.ReadyState != 4 ;Wait for page to load continue if(WB.document.Title = "{gameTitle} for {gamePlatform} ({gameYear}) - MobyGames"){ ComboDialog(url) } } ComboDialog(url){ Global links := WB.document.getElementById("main").getElementsByTagName("a") list := "" loop, % links.length { RegExMatch(links[A_Index - 1].getAttribute("href"), "[^/]*$", game) list .= (A_Index = 2 ? "||" : "|") game } Gui, +Disabled GuiControl, Dialog:, GameLink, %list% Gui, Dialog:Show, AutoSize loop { GuiControlGet, Visible, Dialog:Visible, GameLink if(!Visible){ Break } Sleep, 50 } Gui, -Disabled SplitPath, url, , link MobyArray[CurrentMobyGame] := link "/" GameLink Navigate(link "/" GameLink) } DialogProceed: Gui, Dialog:Submit Gui, -Disabled return SubScrapeBtn: Gui, ListView, MobySysLV LV_Delete() IfNotExist, %dataDir% FileCreateDir, %dataDir% UrlDownloadToFile, http://www.mobygames.com/images/sitemap/sitemap_index.xml, %DataDir%\sitemap.txt Loop, Read, %DataDir%\sitemap.txt { RegExMatch(A_LoopReadLine, "(?<=<loc>).*?(?=</loc>)", URL) SplitPath, URL, name name := RegExReplace(name, "(sitemap_|_games)") UrlDownloadToFile, %URL%, %DataDir%\%name% } PopulateMobySysLV() return ;Google Search button label -------------------------------------------------------------------------------------------------------- SubSearch: StringTrimRight, NameNoExt, CurrentFile, 4 googleterms := NameNoExt . "+" . CurrentFields[2] run, http://www.google.com/search?q=%googleterms% Return ; important to end the label!!! ; Edit button label ---------------------------------------------------------------------------------------------------------------- SubEditBtn: ;GuiControl, Disable, FileLV GuiControl, Disable, GameLV GuiControl, Disable, EditBtn Loop, %NumOfFields% GuiControl, -ReadOnly, ED%A_Index% GuiControl, Enable, CancelBtn GuiControl, Focus, ED2 Modified := False Editing := True Return ; Save button label ---------------------------------------------------------------------------------------------------------------- SubSaveBtn: Gui, +OwnDialogs Editing := False SplitPath, CurrentFile, , , , FileName MsgBox, 4, %GuiTitle%, Save the changes to file %FileName%.csv ? IfMsgBox, Yes { Gui, Submit, NoHide Loop, %NumOfFields% { ; update the game record GuiControlGet, Value, , ED%A_Index% CurrentFields[A_Index] := RegExReplace(Value, "`n", "¤") } GameArray[CurrentGame ? CurrentGame : CurrentFields[2]] := CurrentFields.Clone() ; To-do: save the file! NewContent := "" For Each, GameRecord In GameArray { Loop, %NumOfFields% { NewContent .= GameRecord[A_Index] . (A_Index = NumOfFields ? "`r`n" : Separator) } } if(HFILE := FileOpen(FileDir . "\" . FileName . ".csv", "w")) { HFILE.Write(NewContent) HFILE.Close() } else { MsgBox, 16, %GuiTitle%, Couldn't update file %FileName%.csv!`n`nError: %A_LastError% } PopulateFileLV() PopulateGameLV(FileName ".csv") CurrentGame := False NewContent := "" } ; Fall through to SubCancelBtn to do the rest ; Cancel button label -------------------------------------------------------------------------------------------------------------- SubCancelBtn: Editing := False GuiControl, Disable, CancelBtn GuiControl, Disable, SaveBtn Loop, %NumOfFields% { GuiControl, +ReadOnly, ED%A_Index% } GuiControl, Enable, EditBtn GuiControl, Enable, GameLV GuiControl, Enable, FileLV GuiControl, Focus, GameLV Gui, ListView, GameLV LV_Modify(LV_GetNext(), "Select") ; refill the game record fields Return ; Edits label ---------------------------------------------------------------------------------------------------------------------- SubEditChanged: if(!Editing) { ; not in edit mode Return } if(!Modified) { ; first call while editing GuiControl, Enable, SaveBtn } Modified := True ; something in some of the edit control has been changed Return ; ---------------------------------------------------------------------------------------------------------------------------------- CtlColorStatic(W, L) { ; changes the background of ReadOnly and disabled edits to white for better readability Static Init := OnMessage(0x0138, "CtlColorStatic") ; WM_CTLCOLORSTATIC = 0x0138 Static DCBrush := DllCall("GetStockObject", "UInt", 18, "UPtr") ; DC_BRUSH = 18 GuiControlGet, ControlName, Name, %L% If (SubStr(ControlName, 1, 2) = "ED") { DllCall("SetDCBrushColor", "Ptr", W, "UInt", 0xFFFFFF) Return DCBrush } } KillIE(){ Global WB WB.Quit() }
-
-
what's everyone upto?,it seems to of gone a tad quite on this thread
-
-
Thank you to NJDave.. he's filled over 1500 of the game descriptions In the Mame Ods file. will up to GitHub with his permision
on a side note The kitchens getting there so will be back soon
-
1
-
-
yes would of been ,but I think it may look odd...unsure if this idea would work
-
ill try to do a mock up at the weekend, still got to finish my kitchen as ive been doing overtime at work and knackered when ive been getting in, but I'm sure I could work out a better spaced out theme to allow for bigger boxes, the kodi theme its taken from as 3 variants, tall box , wide box, and square box
-
-
yep making ods/csv/xml files by hand for most part. anyway to scrape the information would save a lot of time, I did use gscrape but it was limited to 25 entries per click.
do you know a way I can scrape mobygames
-
I'm hoping to be back on the ods/csv files soon.. just to much work on at the moment
-
1
-
-
looking good. , the more tools that can use these the better
we just need an ahk wiz to make the frontend for them to make collecting the data easier
-
maybe the same problem I had with csv in openoffice, some entries just would sit right in the cells, even though I tried different delimiters
-
1
-
-
lol I just got all the messages . go missing for a couple of days lol, djvj mentioned about making a gui for editing the files or to add info to so I'm gonna have a look at ahk to see if I can make something
-
forgot to mention earlier , I uploaded the Gameboy advance xml
-
1
-
Aeon nox13 (W.I.P.)
in Universal Themes
Posted
Dupe post