Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Feb 13, 2019 16:32:14 GMT -8
In quoting your reply, I cannot see how different character sets are being specified. I will have to look up "UTF-8" to find out more. That's because the BBCode operates in UTF-8 by default. When editing your post, the editor still operates in UTF-8, not ASCII (even though the font displayed may be monospace and may suggest raw input) and thus all characters are written as-is. In order to see the byte representation of text, you'd have to view it in a hex editor. In ASCII every character is stored in one byte (8 bits). However, in UTF-8 encoding every character may be stored in 1, 2, 3 or even 4 bytes and thus it's variable. For example, if you interpret the following text: "Chinese (汉语)" forcibly as ASCII characters (for example via a hex editor) you'd see the following string (provided you interpreted the string as ASCII in the same code page as I did): "Chinese (汉čŻ)". These two Chinese characters are actually stored in 5 bytes, which in ASCII look like some unrelated gibberish. My interest is in seeing if Microsoft file names, which appear to be hexadecimal strings (0123456789ABCDEF) will decode to something useful. When I do a virus scan, there are thousands of those strings displayed (faster than anyone human could possibly read them), so I was going to go into a few of the folders containing them to see if there was some obscure meaning to them. Otherwise, the people responsible for maintaining the files have a horrendous job to keep things organized. Do you mean files and folders named like: {ED7BA470-8E54-465E-825C-99712043E01C}? These numbers are not a representation of any human-readable text, in any encoding. It's actually a randomly generated GUID - a Globally Unique ID and its meaning is merely to assign a unique identifier to some resources so that they can be referenced back in a unique way.
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Feb 13, 2019 14:29:57 GMT -8
But what for? If you want to write something in Cyrillic or Hebrew, you simply use the UTF-8 encoding and you're done. That way you can use any glyphs from all around the world you want in the same place/document. Now, converting from extended ASCII to UTF-8 is indeed a heck of a trouble as each different extended ASCII code page requires a different translation table, but it can be automated and there are programs for that. Converting between two different extended ASCII code pages however may not be possible at all, as both may contain two sets of completely different glyphs.
The ProBoards forums work in UTF-8, so you can easily write Hebrew (עִבְרִית) or even Chinese (汉语) here. Their usage here is limited however, as you also have to provide the translation in order not to abuse the terms of use.
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Jan 30, 2019 13:00:54 GMT -8
Hey, I've had a funny idea earlier! Unfortunately, I cannot get them to come over the arrowz with me. Any brief explanation for those who don't remember the level and are to lazy to play it or read the walkthrough?
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Jan 29, 2019 12:52:19 GMT -8
I would really be careful with that "creating a new editor" thinger. That stuff would require way more work than this: my framework would also have to be able to read REZ and PID files (and optionally ANI files to add in visually appealing animations). And even if that'd be done, a new editor would require some really careful planning and designing, preferably together with the rest of the community. Such a big project shouldn't be rushed by any means.
I don't think I'd pull this off anytime soon. Even a few years worth of work might not be enough for me to complete such a complex project.
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Jan 28, 2019 14:55:08 GMT -8
Ladies and gentlemen ... the new era in designing Gruntz levels has just begun! For the past few months I've been working on a C++ library for reading and manipulating WWD files. That's nothing new, we've already seen applications which can read a level file and for example list all the collectibles (see my "Gruntz Scrooge" program). Now however we are also able to save the level BACK. What does that mean? We can now do pretty much anything. Randomizing tiles? No problem. Expanding the level to the left or up? No problem! Doing some other tedious tasks like mirroring a part of a puzzle (for battle designs), copying a set of objects from place to place is also no longer a problem. We can now automate ANYTHING. And I'm not kidding. Here's the simple demonstration I whipped up: I've loaded up a Rocky Roadz template and made a simple level. All the tiles on the sides have id 199 and are filled with random trees, to which there is a random mirror effect applied. In the middle there is a free space with random 1-8 tiles. And to finish things off we drop a single Grunt with a pair of Gauntletz! Attachment DeletedNow, how many lines of code were required to generate this level? The answer is: mere 20-30. Here's the link to the corresponding C++ snippet: pastebin.com/2EuiAhkjThis is a C++ library. What it means is that it's not a standalone application; it's used to make applications. It could be used for example to make a new level editor. For now though I'll be using it for some utility tasks only. Perhaps some time in the future I'll make it available from within a scripting language, like Lua or Squirrel - then using the library would be easy, straightforward and wouldn't require a compilation phase. Later on I'll add in the support for REZ, PID and perhaps ANI file formats. At some point I'll also share the library source code on GitHub so that any programmer could use it. I have very high hopes for this project as it may revolutionize the entire process of designing levels and I am VERY excited to share these news with you! Have any questions? Ideas? Anything? Speak up! Cheers! (Edit): I've just noticed it is my 500th post on this forum. Holy guacamole, what a way to that milestone!
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Nov 15, 2018 11:06:59 GMT -8
I made quite a few changes on my blog. It received a complete overhaul and some maintenance changes. Below are the most important news: - I have written the Gruntz Decryptor - the program which allows you to easily modify the ATTRIBUTEZ.TXT and CHEATZ.TXT files
- I have finally translated the articles about deciphering the ATTRIBUTEZ.TXT and CHEATZ.TXT files. Without this process I would never be able to create the Gruntz Decryptor in the first place
I believe the next order of business would be writing the framework for reading and modifying the WWD files. That way I could finally make the utility tool to move the plane around which I mentioned some time earlier for example. It goes without saying that such framework would allow for much, much more than that.
Cheers!
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Nov 11, 2018 6:11:03 GMT -8
Talking about backward compatibility, if you add some tiles after id 329 and create levels which would use them, they will totally require the new REZ archive severely limiting the target audience. The only changes in the REZ file that make sense then is updating the basic duplicated tiles to add in some variety without changing their semantics.
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Oct 31, 2018 1:53:17 GMT -8
In many programming languages, the back slash character \ is an 'escape' character, signifying there is an unusual meaning to the next character: therefore, I presume the sequence is "ignore special usage of the [", the b is 'normal' and "ignore special usage of the ]" (three ordinary characters). The same string is to allow the end tag to also be treated as four ordinary characters. My guess is that the string in the middle is a 'connector' to say "and also do this". But the final \1 eludes me as to what that will do. Yes, they're escape characters indeed - since square brackets are a part of the syntax they need to be escaped in order to be treated literally. Each of the two expressions Perfect Grunt provided is a regular expressions (or regexp for short). You can Google it and get a multitude of tutorials what they are and what it allows you to achieve (including what square brackets are for). I'll just elaborate briefly on your question: the "\1" part is not an escape character like you might have though initially. It's a reference to a capture group. In the first expression you have: \[b\](.*?)\[/b\]Notice the parenthesis. The "find" feature alone does not really need them and can work without it as well. So if you wanted to find all of the ... tags you might as well just type in: \[b\].*?\[/b\] and all occurrences would be found. However when you want to replace just a PART of a found text you have to specify exactly which part you want to alter specifically. That's what the parenthesis are for - they mark a capture group. In this case a capture group represents the text in between and tags. Then in the "Replace with" text box the \1 means: replace the entire ... tag with just its contents and thus discard the and bits. The \1 bit means the first left-most capture group. And so if you had more capture groups you would refer to them by \1, \2 ... and so on. PS.: if you find the replace feature not working, make sure you have the "Regular expression" radio button checked in the "Search mode" section. It's in the bottom-left part of the "Replace" dialog.
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Oct 28, 2018 11:56:35 GMT -8
That is really nice WalkingBear is still hanging with us. Too bad she's not active on the forum itself.
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Oct 28, 2018 4:07:41 GMT -8
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Oct 25, 2018 9:57:16 GMT -8
On a side note I was not the only one suggesting Notepad++ (as swietymiki pointed out). In 2014 Friedslick6 proposed its use here and over a year later Zu did just the same in this post. For some reason however it was my post which was the most persuasive
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Oct 23, 2018 10:35:11 GMT -8
Many of the broken links share the same cause: too many (or too few) ../ strings to refer to an element outside of the folder in which the flawed element resides.
Unfortunately (for me) many of the affected elements have been stripped of the carriage return/line feed characters that are used to indent HTML elements. Being very much OCD relating to programming technique, I spend much of the correction time in simply restoring the desired indentation presentation. The affected elements have shared one thing in common ... a string of 8 (apparently) blank characters before the <title> element, which I believe are actually controls that some program uses to restore indentation within a browser. With the CR/LFs stripped, incredibly longs strings are generated ... at least 4,096 characters long ... much longer than can be displayed even in today's screen resolutions!
When I was working on Gaby's index of Custom Levelz (which had the CR/LFs removed), a change in the length of an early string's length resulted in the display of the entire element(!) being shifted, which makes me think that the limit of the string length is much greater than 4,096 characters.
So please bear with me concerning the amount of time it is taking to resolve these broken links. It looks like every *.html file HAS the new line characters and in fact - IS split into lines. The problem is that you decode those characters wrong. I bet you are using Windows Notepad or the like, aren't you? The problem with the files is that more often than not the new line character used is CR (0x0D or 13 in decimal) which is rarely used - maybe by some Mac OSes. It's not the native way to mark a new line on Windows (where CR LF (0x0D 0x0A or 13 10 in decimal) combination is used) and so the classic Notepad application will not decode them properly resulting in long lines. If you value your sanity to any extent please, DO NOT attempt to manually correct all these files. Instead open them in a decent text editor (the best free alternative would be Notepad++) and work with the files from there. Or if you really want to use your original text editor, CONVERT the file to the proper format with Windows-supported CRLF line endings beforehand.
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Oct 22, 2018 11:47:48 GMT -8
My crawler has found 8376 links total. This includes links in typical anchor tags (like: <a href="link.html>...</a>) as well as image source URLs (like: </img src="fancy.png">). There's one caveat however when it comes to the dead links I've listed above. There are more dead links in the manual. The crawler ignores the links that it already visited and does not visit them more than once (otherwise it would immediately fall into a crawling loop having visited the pages which linked to themselves). I mistakenly relied on this mechanism to count the dead links. What I actually counted in fact is the amount of unique 404 URLs that happen to be in the manual. So multiple occurrences of the same "dead URL" would still count as one. My bad, sorry for that. I've corrected the crawler and run it on the same old manual I had at the very beginning (so your most recent fixes won't be visible here) and it turns out there are not 28 dead links in the manual, but 94. Way too many to list them here. That's why I've posted a sheet with all the data here: docs.google.com/spreadsheets/d/1YVkibnkz5uvaa6NO50Po9zPOjRJTcEPzIyrZ3oDILQo/edit?usp=sharingThere are three columns there: the path to the file where the dead link is, the actual URL of the 404 resource and the HTML tag which has the dead URL. You can make a copy of the document or download it and make your own amendments if you wish. And responding to your question: 94 dead links would make the correctness rate 98.88%
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Oct 20, 2018 14:22:11 GMT -8
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Sept 28, 2018 13:54:24 GMT -8
In my game directory I have two executables, one being a result of some reverse engineering while the other is the original Gruntz.exe. The one that I have modified does not list any levels from the Custom folder for some reason. I've never inspected why's that happening, simply used the original executable. Perhaps your case might be related in someway.
Is your executable the same as the one on the Gruntz CD? If not a simple copy & paste should do the trick.
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Sept 26, 2018 14:18:58 GMT -8
What amazes me the most is that even after 19 years from the original release of the game there are still many things yet to discover. Things that don't necessarily require reverse engineering and programming experience - like this topic.
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Sept 26, 2018 12:59:18 GMT -8
A few days ago I've been designing a puzzle involving a friendly sponge gun Grunt. I had to assess in which direction he could possibly knock back the enemy Grunt that's in his range. You know, stuff like: is he's below the enemy Grunt, the target will be knocked upwards and so on. It's easy for straight horizontal/vertical/diagonal locations. But it's the areas in between that I'm really after. Now, if we have the enemy Grunt located somewhere, there's 120 different tiles from which our sponge gun Grunt can attack him. I've tested each tile and discovered something interesting. I've always assumed the distribution of the areas from which you can send the enemy Grunt in one particular direction is symmetrical quarter-wise. This ... turned out not to be true. I've designed a preview image of those areas. The arrows in the areas indicate the direction in which the enemy would be knocked back: Look closely at the green (vertical) and the orange (horizontal) areas. They're not identical - the distribution of tiles is slightly different and thus the blue areas are not symmetrical to the diagonals. Believe it or not, but that precise lack of symmetry broke my puzzle pretty badly Now since I'm a programmer I'm more interested in what is the reason for such asymmetrical distribution. Maybe the cause is a simple inequality which is satisfied in a horizontal direction but not in the vertical one? Or (which is less likely) maybe it was the programmers' deliberate decision and made a look-up table for each of the 120 tiles? One would have to reverse the executable to find out how's the direction really evaluated. Obviously it's not high on my priority list
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Aug 3, 2018 5:31:15 GMT -8
I've beaten the level, but I have no clue where the red warp can possibly be. I checked all dead ends in the labyrinth and nothing was triggered. Other than that, it's a nice level with minimal thinking required. Well it's not terribly hard to find once you open the level up in GLE. However it doesn't look like its position is hinted by anything on the map and its in a rather ... inconspicuous location to my taste.
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Jun 20, 2018 12:22:41 GMT -8
Heya guyz, read through the thread and it seems I have a unique problem. Installed the compatibility patch and created the Gruntz.sav file, but I can't even open Gruntz! The error message I get says "Can't get the primary surface. DirectX 5 is required (3002)" Tried everything but I can't get it working! Running on Windows 7 x64, Lenovo Thinkpad t420. Any ideas? That is a weird error message indeed, because Windows 7 comes with DirectX 11 by default. If in doubt, you can always open the Start Menu, type in "dxdiag" without the quotation marks and hit enter. You can verify your DirectX version there.
|
|
Tomalla
Designer
General Modder
Posts: 525
|
Post by Tomalla on Jun 15, 2018 14:08:13 GMT -8
Oh, I've just remembered one more thing. Once you create your newly baked Grunt on the island below those toggling bridges (the GruntCreationPoint is surrounded by a rolling ball), you activate a Yellow Toggle Switch. It releases the rolling ball to the left which eventually activates the Black One Time Switch which blocks your path.
In order to have more time (or to be more precise - to have an unlimited amount of time), simply put your newly baked Grunt on the GruntCreationPoint, step out of it and return to the GruntCreationPoint. If timed correctly, the rolling ball to the left will never leave its spot and will never hit the BOTS thus giving you time to slowly work your way through the toggling bridges.
|
|