Flix 5,116 Posted June 22, 2022 Share Posted June 22, 2022 Pesmontis's emphasis was on what FX might work well attached to models. My exported list from the dll contains all of the FX you mentioned. Link to comment
dimitrius154 612 Posted June 22, 2022 Share Posted June 22, 2022 38 minutes ago, Lindor said: so they should be listed here somewhere. Then, I'd say there's a fault within the extraction logic. A partial "string" filter, perhaps? Link to comment
Lindor 438 Posted June 22, 2022 Author Share Posted June 22, 2022 I have found my years old extraction folder and all the lists on my PC, the FX appear on these lists and even on the fineal (very confusing) spreadsheet. I guess it was human error then and I accidentally "skipped" these FX. Link to comment
Lindor 438 Posted May 18, 2023 Author Share Posted May 18, 2023 @Flix this is not important, but can you share a data dump about all the texture file / fx relations you know? It'd be a great asset both for the fx ist as well as another, older dream of mine: an fx finding and editing tool. Now that I have acquired the skills to create GUI applications, this dream moved into closer proximity 1 Link to comment
Lindor 438 Posted January 13 Author Share Posted January 13 It's pretty tedious to sarch the data of the entirety of the project. Therefore I'd like to migrate some of the data to the wiki. My vision is a sortable and filterable list without screenshots. I envision something like: FX name Spells.txt Usability Flag (Standard, Partial, Casting, Spell, Unusable) questscripts.txt usability Flag (TRUE/FALSE) SFX Flag (TRUE/FALSE) VFX Flag (TRUE/FALSE) FX appliance flag (smth. like Skin/Projectile/Beam/Gound) Boss Flag (e.g. Scorpion, Octagolamus, None etc.) Hero Flag (e.g. High Elf, Dryd, None etc.) Spells.txt Ranking (0: basically unusable, 5: absolutely stunning, of course that's pretty individual preference) corresponding shader(s), if existent corresponding image(s), if existent corresponding particle script(s), if existent So smth. like 12 different columns It would also be great if multiple persons could edit it and not just myself. But does the wiki even have the ability to create sortable and filterable lists? One'd need some Javascript for it. But it'd be exceptionally useful. Link to comment
Lindor 438 Posted January 13 Author Share Posted January 13 3 hours ago, Lindor said: But does the wiki even have the ability to create sortable and filterable lists? Sortable yes, filterable no, unfortunately. Still impressive. I've tried to provide a starting point: https://www.sacredwiki.org/index.php/Sacred_2:FX This will be a lot of work it seems. 1 Link to comment
gogoblender 3,069 Posted January 13 Share Posted January 13 3 hours ago, Lindor said: Sortable yes, filterable no, unfortunately. Still impressive. I've tried to provide a starting point: https://www.sacredwiki.org/index.php/Sacred_2:FX This will be a lot of work it seems. I was thinking about your questions re filtering... Yah the wiki can do tables but I dont remember it ever being able to do filtering..its funny cuz with most spread sheets that I use at work, you absolutely need filtering to be able to drill down quickly. Its still always a pleasure to see people enjoying this game Lindor, almost 20 years later, and finding satisfaction in documenting what could have been the greatest game EVER... gogo 1 Link to comment
gogoblender 3,069 Posted January 16 Share Posted January 16 On 1/13/2024 at 12:10 PM, Lindor said: Sortable yes, filterable no, unfortunately. Still impressive. I've tried to provide a starting point: https://www.sacredwiki.org/index.php/Sacred_2:FX This will be a lot of work it seems. Gooood morning Lindor! Was just looking at your new spread sheet, its E P I C I was looking at it with Schot we remember when we were finding table codes for the Wiki, they were sometimes not quite what we wanted but we were able to find some great table solutions ad the tables can be beautful We read your notes..how did the import of information from DarkMatters go, was the database able to complete your requests to save or were there any times that you noticed saves or edits were taking a while to execute? The Wiki uses a level of *engine use* that we keep mostly set for low level activity, but well consider increases our engine size if you feel that you're unable to save edits in a timely manner, or is there a type of functionality, search or cron job that was now working well that we could look at improving? Thanks for really digging into this modding module you're making for new modders... youre thoughtful, generous and organized... you'll have loads of mini sacredites running around here in no time! gogo Link to comment
Lindor 438 Posted January 16 Author Share Posted January 16 3 hours ago, gogoblender said: Gooood morning Lindor! Was just looking at your new spread sheet, its E P I C I was looking at it with Schot we remember when we were finding table codes for the Wiki, they were sometimes not quite what we wanted but we were able to find some great table solutions ad the tables can be beautful We read your notes..how did the import of information from DarkMatters go, was the database able to complete your requests to save or were there any times that you noticed saves or edits were taking a while to execute? The Wiki uses a level of *engine use* that we keep mostly set for low level activity, but well consider increases our engine size if you feel that you're unable to save edits in a timely manner, or is there a type of functionality, search or cron job that was now working well that we could look at improving? Thanks for really digging into this modding module you're making for new modders... youre thoughtful, generous and organized... you'll have loads of mini sacredites running around here in no time! gogo Hehe unfortunately for germany a lot of websites went down last weekend including darkmatters and the wiki. It always said the account would've been suspended. There's no explanation yet, I believe it must have to do with issues at a central internet exchange point somewhere in germany, using the tracert command revealed that the signal got lost somewhere at a class a network router. Kinda ruined my sunday lol At first it made me realise that I should back up important data that is currently only stored at darkmatters or the wiki. On the other hand - what would be the point of modding without darkmatters? As far as editing went, there were absolutely no issues, and there were a lot of edits. It said I couldn't generate a table with more than 1000 cells at first, so I generated a small one instead and slowly expanded it. Don't know wether passing those 1000 cells is possible this way, also didn't count wether they're already passed. But the edits went smooth so far. If tables were filterable, I'd make a single huge table instead of breaking it up with my classification system. I was actually thinking about scripting my own javascript table and asking you to implement it in the wiki, but this isn't a promise. I love darkmatters, I love the wiki, and not in the same way palpatine loved democracy and the republic xD. Sending much of love 1 Link to comment
Lindor 438 Posted January 20 Author Share Posted January 20 @gogoblender @Schot On 1/16/2024 at 6:15 PM, Lindor said: I was actually thinking about scripting my own javascript table and asking you to implement it in the wiki, but this isn't a promise. I have done it HTML: Spoiler <!DOCTYPE html> <html> <head> <title>sortable table</title> <link rel="stylesheet" type="text/css" href="table.css"> </head> <body> <script src="table.js"></script> <!-- Example Table Start --> <table id="Table_0"> <!-- The table header row --> <tr> <th> <!-- First column header content, has to be put in a div to ensure that the filter is put below and not next to the content --> <div onclick="sortTableByColumn('Table_0', 0)">Number 1</div> <!-- First column header filter --> <input type="text" id="filter_t0_c0" onkeyup="filter('Table_0', 'filter_t0_c0', 0)" placeholder="filter"> </th> <th> <!-- Second column header content --> <div onclick="sortTableByColumn('Table_0', 1)">Number 2</div> <!-- Second column header filter --> <input type="text" id="filter_t0_c1" onkeyup="filter('Table_0', 'filter_t0_c1', 1)" placeholder="filter"> </th> <th> <!-- Third column header content --> <div onclick="sortTableByColumn('Table_0', 2)">Letter</div> <!-- Third column header filter --> <input type="text" id="filter_t0_c2" onkeyup="filter('Table_0', 'filter_t0_c2', 2)" placeholder="filter"> </th> </tr> <!-- The table content rows --> <tr> <td>2</td> <td>1</td> <td>a</td> </tr> <tr> <td>2</td> <td>2</td> <td>b</td> </tr> <tr> <td>1</td> <td>1</td> <td>c</td> </tr> <tr> <td>1</td> <td>2</td> <td>d</td> </tr> <!-- This has to always be put at the end of a table to make sure the table starts sorted on being loaded --> <script> sortTable("Table_0"); </script> </table> <!-- Example Table End --> </body> </html> CSS: Spoiler table, th, td { border: 1px solid black; border-collapse: collapse; } JavaScript: Spoiler // Sorts a tables rows by a specific column without changing the order of rows with the same content in the columns cell // A slow but stable sorting Algorithm of O(n^2) // "Stable" is a description of sorting algorithms in informatics and means that it does not change the order of rows with the same content function sortTableByColumn(tableID, columnIndex) { var table, rows, I, runs, x, y, issorted; table = document.getElementById(tableID); rows = table.rows; runs = rows.length - 1; // the issorted var is not strictly necessary; it's there to speed the algorithm up, e.g. in case of an already sorted table issorted = false; // loop through the rows while ((issorted == false) && (runs > 0)) { issorted = true; // Ensure that the largest element is at the end of the run for (I = 1; I < runs; I++) { x = rows[I].getElementsByTagName("td")[columnIndex]; y = rows[I + 1].getElementsByTagName("td")[columnIndex]; if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) { rows[I].parentNode.insertBefore(rows[I + 1], rows[I]); issorted = false; } } runs = runs - 1; } } // Sorts a tables rows first by the last column, then the second-to-last and so on all the way up to the first column, // ensuring that the table is always ordered by the first column. function sortTable(tableID) { var length, I; length = document.getElementById(tableID).rows[0].cells.length - 1; for (I = length; I >= 0; I = I - 1) { sortTableByColumn(tableID, I); } } /* // Filter a table by function filter(tableID, filterID, columnIndex) { // Declare variables var table, tableRows, tableRows, tableCell, tableCellContent, filterInput, filterContent, I; table = document.getElementById(tableID); tableRows = table.getElementsByTagName("tr"); filterInput = document.getElementById(filterID); filterContent = filterInput.value.toLowerCase(); // Loop through all table rows for (I = 0; I < tableRows.length; I++) { // The table cell at the column index of the row tableCell = tableRows[I].getElementsByTagName("td")[columnIndex]; // Does the cell even exits or is it a none value? if (tableCell) { tableCellContent = tableCell.textContent || tableCell.innerText; // does tableCellContent contain filterContent somewhere? if (tableCellContent.toLowerCase().indexOf(filterContent) > -1) { tableRows[I].style.display = ""; } else { tableRows[I].style.display = "none"; } } } } */ // Filter a table by function filter(tableID, filterID, columnIndex) { // Declare variables var table, tableRows, tableRows, tableCell, tableCellContent, filterInput, filterContent, I, j; table = document.getElementById(tableID); tableRows = table.getElementsByTagName("tr"); filterInput = document.getElementById(filterID); filterContent = filterInput.value.toLowerCase(); // Loop through all table rows for (I = 0; I < tableRows.length; I++) { // The table cell at the column index of the row tableCell = tableRows[I].getElementsByTagName("td")[columnIndex]; // Does the cell even exits or is it a none value? if (tableCell) { tableCellContent = tableCell.textContent || tableCell.innerText; // does tableCellContent contain filterContent somewhere? if (tableCellContent.toLowerCase().indexOf(filterContent) > -1) { tableCell.setAttribute("needsToBeHidden", "0"); } else { tableCell.setAttribute("needsToBeHidden", "1"); } } } for (I = 0; I < tableRows.length; I++) { tableRows[I].style.display = ""; for (j = 0; j < tableRows[0].cells.length; j++) { tableCell = tableRows[I].getElementsByTagName("td")[j]; if (tableCell) { if (tableCell.getAttribute("needsToBeHidden") == "1") { tableRows[I].style.display = "none"; break; } } } } } Everything commented out to make it easier to understand. Can you implement it for the wiki? Would be awesome! If there are extra wishes, I could provide them. Greetings 1 Link to comment
gogoblender 3,069 Posted January 23 Share Posted January 23 On 1/20/2024 at 3:06 PM, Lindor said: @gogoblender @Schot I have done it HTML: Reveal hidden contents <!DOCTYPE html> <html> <head> <title>sortable table</title> <link rel="stylesheet" type="text/css" href="table.css"> </head> <body> <script src="table.js"></script> <!-- Example Table Start --> <table id="Table_0"> <!-- The table header row --> <tr> <th> <!-- First column header content, has to be put in a div to ensure that the filter is put below and not next to the content --> <div onclick="sortTableByColumn('Table_0', 0)">Number 1</div> <!-- First column header filter --> <input type="text" id="filter_t0_c0" onkeyup="filter('Table_0', 'filter_t0_c0', 0)" placeholder="filter"> </th> <th> <!-- Second column header content --> <div onclick="sortTableByColumn('Table_0', 1)">Number 2</div> <!-- Second column header filter --> <input type="text" id="filter_t0_c1" onkeyup="filter('Table_0', 'filter_t0_c1', 1)" placeholder="filter"> </th> <th> <!-- Third column header content --> <div onclick="sortTableByColumn('Table_0', 2)">Letter</div> <!-- Third column header filter --> <input type="text" id="filter_t0_c2" onkeyup="filter('Table_0', 'filter_t0_c2', 2)" placeholder="filter"> </th> </tr> <!-- The table content rows --> <tr> <td>2</td> <td>1</td> <td>a</td> </tr> <tr> <td>2</td> <td>2</td> <td>b</td> </tr> <tr> <td>1</td> <td>1</td> <td>c</td> </tr> <tr> <td>1</td> <td>2</td> <td>d</td> </tr> <!-- This has to always be put at the end of a table to make sure the table starts sorted on being loaded --> <script> sortTable("Table_0"); </script> </table> <!-- Example Table End --> </body> </html> CSS: Reveal hidden contents table, th, td { border: 1px solid black; border-collapse: collapse; } JavaScript: Reveal hidden contents // Sorts a tables rows by a specific column without changing the order of rows with the same content in the columns cell // A slow but stable sorting Algorithm of O(n^2) // "Stable" is a description of sorting algorithms in informatics and means that it does not change the order of rows with the same content function sortTableByColumn(tableID, columnIndex) { var table, rows, I, runs, x, y, issorted; table = document.getElementById(tableID); rows = table.rows; runs = rows.length - 1; // the issorted var is not strictly necessary; it's there to speed the algorithm up, e.g. in case of an already sorted table issorted = false; // loop through the rows while ((issorted == false) && (runs > 0)) { issorted = true; // Ensure that the largest element is at the end of the run for (I = 1; I < runs; I++) { x = rows[I].getElementsByTagName("td")[columnIndex]; y = rows[I + 1].getElementsByTagName("td")[columnIndex]; if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) { rows[I].parentNode.insertBefore(rows[I + 1], rows[I]); issorted = false; } } runs = runs - 1; } } // Sorts a tables rows first by the last column, then the second-to-last and so on all the way up to the first column, // ensuring that the table is always ordered by the first column. function sortTable(tableID) { var length, I; length = document.getElementById(tableID).rows[0].cells.length - 1; for (I = length; I >= 0; I = I - 1) { sortTableByColumn(tableID, I); } } /* // Filter a table by function filter(tableID, filterID, columnIndex) { // Declare variables var table, tableRows, tableRows, tableCell, tableCellContent, filterInput, filterContent, I; table = document.getElementById(tableID); tableRows = table.getElementsByTagName("tr"); filterInput = document.getElementById(filterID); filterContent = filterInput.value.toLowerCase(); // Loop through all table rows for (I = 0; I < tableRows.length; I++) { // The table cell at the column index of the row tableCell = tableRows[I].getElementsByTagName("td")[columnIndex]; // Does the cell even exits or is it a none value? if (tableCell) { tableCellContent = tableCell.textContent || tableCell.innerText; // does tableCellContent contain filterContent somewhere? if (tableCellContent.toLowerCase().indexOf(filterContent) > -1) { tableRows[I].style.display = ""; } else { tableRows[I].style.display = "none"; } } } } */ // Filter a table by function filter(tableID, filterID, columnIndex) { // Declare variables var table, tableRows, tableRows, tableCell, tableCellContent, filterInput, filterContent, I, j; table = document.getElementById(tableID); tableRows = table.getElementsByTagName("tr"); filterInput = document.getElementById(filterID); filterContent = filterInput.value.toLowerCase(); // Loop through all table rows for (I = 0; I < tableRows.length; I++) { // The table cell at the column index of the row tableCell = tableRows[I].getElementsByTagName("td")[columnIndex]; // Does the cell even exits or is it a none value? if (tableCell) { tableCellContent = tableCell.textContent || tableCell.innerText; // does tableCellContent contain filterContent somewhere? if (tableCellContent.toLowerCase().indexOf(filterContent) > -1) { tableCell.setAttribute("needsToBeHidden", "0"); } else { tableCell.setAttribute("needsToBeHidden", "1"); } } } for (I = 0; I < tableRows.length; I++) { tableRows[I].style.display = ""; for (j = 0; j < tableRows[0].cells.length; j++) { tableCell = tableRows[I].getElementsByTagName("td")[j]; if (tableCell) { if (tableCell.getAttribute("needsToBeHidden") == "1") { tableRows[I].style.display = "none"; break; } } } } } Everything commented out to make it easier to understand. Can you implement it for the wiki? Would be awesome! If there are extra wishes, I could provide them. Greetings Lindor you are a beautiful sweet heart!!...cmon on for a trademark DarkMatters Kindness hug!! I remember how you were writing about how much work it was but you got through it it...its your *thang* and what a thang! sooooo... re Wiki... were looking at it carefullly... every since a few days ago, the page has been trying to effect some kind of a cron job repeatedly ...and when it attempts to do this, all the resources of the two sites drop.. its happened a numerous times in a row to us now so we got a bit scared, reverted the last page of edits and put wiki asleep... this week Schot's gonna look at it more carefully he needs to understand the code and ...when hes has seen *The Pattern!!!* hell bring it back online...and of course sir, you, friend...you shall have your page upon it and eat it too!! unless of course Schot....tells us not gogo Link to comment
Lindor 438 Posted January 23 Author Share Posted January 23 8 hours ago, gogoblender said: Lindor you are a beautiful sweet heart!!...cmon on for a trademark DarkMatters Kindness hug!! I remember how you were writing about how much work it was but you got through it it...its your *thang* and what a thang! sooooo... re Wiki... were looking at it carefullly... every since a few days ago, the page has been trying to effect some kind of a cron job repeatedly ...and when it attempts to do this, all the resources of the two sites drop.. its happened a numerous times in a row to us now so we got a bit scared, reverted the last page of edits and put wiki asleep... this week Schot's gonna look at it more carefully he needs to understand the code and ...when hes has seen *The Pattern!!!* hell bring it back online...and of course sir, you, friend...you shall have your page upon it and eat it too!! unless of course Schot....tells us not gogo For the table code: Well, it's much or little work depending on the perspective. The sorting algorithm e.g., it's not the best, I can already see that I could improve it vastly with just a couple of lines of code, and I could've spent some time to implement a proper sorting algorithm, probably stable mergesort as it's my favourite, instead. I just didn't give it as much thought, we're dealing with tiny sets of data and don't need to sort thousands of times per second, so it's just not that relevant. But it could be better. And then the real work needs to be done by schot as he needs to write the algorithm to convert plain text into HTML in order to implement it into the wiki. I could provide that as well, but I don't know which programming language or API you're using to generate wiki pages. Compared to what I did with the Oren-Nayar Fur Shader Pack or the Blueprint.txt Overhaul, this is kindergarten programming. But given the small amount of free time I have, it's a lot of work for me now. For the cron job: I thought I was the only one for whom the Darkmatters and Wiki page didn't respond anymore the previous weekend. So it wasn't a Germany issue, then. Well that's odd. Why on earth should a random wiki page attack your servers, and then even so 'successfully'? I sincerely hope that the system I have is not infested with some sort of malicious software and now infested your infrastructure. That would be worst case scenario. Windows Defender says I'm alright, but who knows. For the kind words: I'm anxiously grateful. If I were you, I'd suspect that Lindor guy might've something to do with the attacks. He seems to have the skills and can be quite temperamentfull at times. After the two pages went down, and right after it was back you removed the wiki page I created, I suspicioned something like that but I thought it was just 'normal' paranoia. Can't believe that it actually turned out to be true. If you or schot need something from me in order to find *The Pattern*, let me know. I have no intention to do any harm, my intention is to bring in new modders creating interesting new mods which I may wanna try out myself, like Vishanka, secondly I wanna make it easier for myself completing my own mod and finally -can't really deny that- I love when my work gets admired a little bit. Believe it or not, the experiences I made here with all of you literally saved my life. @Flix @Dax @gogoblender @dimitrius154 @Vishanka @idbeholdME You all don't know how important you had become to me. It feels so good to finally be appreciated. That's something which from the moment I was born up to the moment I joined the darkmatters community, nobody ever gave to me. Now that my personal life has finally become important to me and I have things and people to care about, naturally the time I spend here somewhat diminishes. But I will never forget what you mean to me and how you were the candlelight in my darkest time. Maybe I can share some of my personal story with some of you via PM if you're interested. Be warned that it's quite an emotional rollercoaster. So yeah, thanks for being so nice to me. Hope the wiki is back up and running soon. 1 Link to comment
Popular Post Vishanka 236 Posted January 24 Popular Post Share Posted January 24 Oooh I got pinged, although I have to admit that I have to look through this in detail what you did that I could use. I have not been very active posting anything and busy on different projects that involve AI, but I'm in fact also still modding on that game. It's crazy what things you get to do if you're a bit involved on the internet and all the people you meet. You are appreciated and I love to read along and will surely need your help in the future. I have finally gotten some tools for modding, because everything I did was done by painting on the DDS files, and now I can also paint on the model directly. At the moment I am restructuring my mods and workflows because it's always been very messy, unlike your organized work that's easy to follow along and your documentation. Will see you as a role model and contribute more again as well. Until soon. 1 2 Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now