HomeForumsWhat's newResources 
 
 
Translating Grandia 1.1.1
TrekkiesUnite118 - Sep 9, 2018

 < Prev  1  ...  16  17  18  19  20  ...  48  Next> 

 nanash1 Sep 8, 2019
My decompression program is working. I converted the output binary data to a grayscale image to verify. The bottom part looks messed up because those image are the names and they have a different width than the other tiles. The binary data however is correct. I think I already have a basic understanding of the compression. There are however some curious parts. For example at the beginning of the function an instruction is fetched from RAM depending on an offset that is contained in the first byte of compression data. This instruction then overwrites another instruction in the function, so that a XOR instruction becomes a SUB instruction. Maybe this will make sense when I'm done with the re-compression.

 Mr Conan Sep 8, 2019
Might be a variant of delta coding?


 nanash1 Sep 8, 2019
Thanks for the link. I'm sure now it's a delta encoding combined with special handling of zero blocks. With this information it shouldn't be too hard to write the compression program.

Edit: So it turns out what I thought would be the hard part is actually the easy one. I've figured out all the different elements of the compression and even wrote a working sub function for the delta encoding. Now all that's left is bringing it all together and making a workable command line tool out of it. I don't think this should take too long.

 nanash1 Sep 15, 2019
My compression is working. To demonstrate I made a video to show my friend. Now all I need to do is make the command line interface and documentation. Then I'll publish it here.

DOMDocument Object ( [doctype] => (object value omitted) [implementation] => (object value omitted) [documentElement] => (object value omitted) [actualEncoding] => utf-8 [encoding] => utf-8 [xmlEncoding] => utf-8 [standalone] => 1 [xmlStandalone] => 1 [version] => [xmlVersion] => [strictErrorChecking] => 1 [documentURI] => [config] => [formatOutput] => [validateOnParse] => [resolveExternals] => [preserveWhiteSpace] => 1 [recover] => [substituteEntities] => [firstElementChild] => (object value omitted) [lastElementChild] => (object value omitted) [childElementCount] => 1 [nodeName] => #document [nodeValue] => [nodeType] => 13 [parentNode] => [childNodes] => (object value omitted) [firstChild] => (object value omitted) [lastChild] => (object value omitted) [previousSibling] => [nextSibling] => [attributes] => [ownerDocument] => [namespaceURI] => [prefix] => [localName] => [baseURI] => [textContent] => Imgur: The magic of the Internet //!SSR:no -1===["i".concat("mgur.com"),"i".concat("mgur-stg.com"),"localhost"].indexOf(window.location.hostname)&&window.location.replace("https://i".concat("mgur.com")) !function(e,t,a,n){e[n]=e[n]||[],e[n].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var g=t.getElementsByTagName(a)[0],m=t.createElement(a);m.async=!0,m.src="https://www.googletagmanager.com/gtm.js?id=GTM-M6N38SF",g.parentNode.insertBefore(m,g)}(window,document,"script","dataLayer") document.addEventListener("ANAReady",()=>{initAssembly()});const initAssembly=()=>{let e={};try{const n=new URL(document.location).searchParams.get("campaign_id");n&&(e.campaign_id=n)}catch(e){console.error(e)}const n={enableSingleRequest:!0,sandboxIframe:!0,collapseEmptyDivs:!0,globalTargeting:e};window.ANA=new ANAWeb({gptOptions:n,syncCookies:!0,propertyId:"localhost"===window.location.hostname?"imgur.com":window.location.hostname,unifiedIdEnabled:!0})} !function(e,t){e[t]=e[t]||function e(){(e.q=e.q||[]).push(arguments)},e[t].v=e[t].v||2,function(e,c,n,o,d,i){function a(o,d){(o=function(c,n){try{if(n=(c=e.localStorage).getItem("_aQS02MzZCRjlDNzlEMDIyRDZGNjU3RkI3N0EtNA"))return JSON.parse(n).lgk||[];if((c.getItem(decodeURI(decodeURI("%76%253%34a%256%33%31%2565iZ%72%30")))||"").split(",")[4]>0)return[[t+"-engaged","true"]]}catch(e){}}())&&typeof o.forEach===n&&(d=e[c].pubads())&&o.forEach(function(e){e&&e[0]&&d.setTargeting(e[0],e[1]||"")})}try{(i=e[c]=e[c]||{}).cmd=i.cmd||[],typeof i.pubads===n?a():typeof i.cmd.unshift===n?i.cmd.unshift(a):i.cmd.push(a)}catch(e){}}(window,"googletag","function")}(window,decodeURI(decodeURI("%61%256%34%6di%25%372%61%256%63"))),function(e,t,c){c=e.createElement(t),e=e.getElementsByTagName(t)[0],c.async=1,c.src="https://quicklyedit.com/bundles/2f7d64b38b67/80b678c0231f11359553eba6.v1.js",e.parentNode.insertBefore(c,e)}(document,"script") dataLayer=[];var pbjs=pbjs||{};pbjs.que=pbjs.que||[] window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create","UA-6671908-2","auto") If you're seeing this message, that means JavaScript has been disabled on your browser, please enable JS to make Imgur work. )
Fatal error: Uncaught Error: Call to a member function getAttribute() on null in /var/www/html/sub/sx/messageParser.php:92 Stack trace: #0 /var/www/html/sub/sx/templates/remoteEmbed.php(20): DecodeImgur() #1 /var/www/html/sub/sx/templating.php(50): include('...') #2 /var/www/html/sub/sx/templating.php(51): Template->{closure}() #3 /var/www/html/sub/sx/templating.php(71): Template->render() #4 /var/www/html/sub/sx/templating.php(41): Stencil->render() #5 /var/www/html/sub/sx/messageParser.php(199): Template->include() #6 /var/www/html/sub/sx/messageParser.php(9): ParseNode() #7 /var/www/html/sub/sx/templates/message.php(35): ParseMessageContent() #8 /var/www/html/sub/sx/templating.php(50): include('...') #9 /var/www/html/sub/sx/templating.php(51): Template->{closure}() #10 /var/www/html/sub/sx/templating.php(71): Template->render() #11 /var/www/html/sub/sx/templating.php(41): Stencil->render() #12 /var/www/html/sub/sx/templates/threads.php(55): Template->include() #13 /var/www/html/sub/sx/templating.php(50): include('...') #14 /var/www/html/sub/sx/templating.php(51): Template->{closure}() #15 /var/www/html/sub/sx/templating.php(71): Template->render() #16 /var/www/html/sub/sx/index.php(89): Stencil->render() #17 {main} thrown in /var/www/html/sub/sx/messageParser.php on line 92