3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 2064|回复: 7
打印 上一主题 下一主题

[转贴] 基连野望·女王与墨镜鸭的威胁解压缩算法公开

[复制链接]

17

主题

521

帖子

934

积分

3DMGAME工作室

Rank: 12Rank: 12Rank: 12

贡献度
50
金元
7344
积分
934
精华
0
注册时间
2007-12-7
跳转到指定楼层
主题
发表于 2008-2-13 10:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果转载或者使用本代码请在显要位置著名:原作者 kid



/* 

 SD0 for Kidou Senshi Gundam Giren no Yabou Axis no Kyou(PSP)
 Version: v0.1 2008.2.9
 Author:  kid
*/
#include "File.h"
UCHAR* uncompress0(UCHAR *src,unsigned long size, unsigned long dstsize)
{
 UCHAR *dst = new UCHAR[dstsize];
 memset(dst, 0,dstsize);
 UCHAR *p = dst;
 unsigned char flag;
 for (unsigned int i = 0; i < size - 1;)
 {
  flag = src[i++];
  for (int t = 0; t < 8; t++)
  {
   if (i >= size - 1)
    break;
   if (flag & 1)
   {
    unsigned char f = src[i++];
    switch (f & 0xf)
    {
     case 1:  //XY ZZ  X+3 数量, ZZ RLE字符(Y=1)
      {
       unsigned int num = ((f & 0xf0) >> 4) + 3;
       char s = src[i++];
              
       for (unsigned int j = 0; j < num; j++)
        *p++ = s;
      }
      break;
     case 2:
      {
       unsigned int num = (src[i++] + 1) * 16;
       num += ((f & 0xf0) >> 4) + 2;
       for (unsigned int j = 0; j < num; j++)
        *p++ = src[i++];
      }
      break;
     default: //XY ZZ  Y 数量,ZZX窗口位置(Y!=1,2)
      {
       unsigned int num = f & 0xf;
       unsigned int pos = (src[i++] << 4) | ((f & 0xf0) >> 4);
       if (num == 0)
        num = 16 + src[i++];
       for (unsigned int j = 0; j < num; j++)
        *p++ = *(p - pos);
      }
    }
   }
   else
   {
    *p++ = src[i++];
   }
   flag>>=1;
  }
 }
 
#ifdef _DEBUG
 if (p-dst != dstsize)
 {
  printf("Uncompress error! %xt%xn",dstsize,p-dst);
  exit(-1);
 }
#endif
 return dst;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-3-28 11:48 , Processed in 0.026026 second(s), 16 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表