거상공략/팁 - 거상 갤러리

AGF 언팩 스크립트 및 투명화 팁 공개

ㅇㅇ 비회원 5.8 4년 전 조회 17931

IDString "\x23\x00\x00\x00"

log MEMORY_FILE1 0 0 //temporary frame file

get FNAME basename
get FSIZE asize
get EXTNAME extension

goto 0xC
get FRAME_COUNT long

goto 0x4C0
for i = 1 <= FRAME_COUNT
   get FRAME_OFFSET long
   putarray 0 i FRAME_OFFSET
next i

set UNZIPED_SIZE_ADDR FRAME_COUNT
math UNZIPED_SIZE_ADDR * 8
math UNZIPED_SIZE_ADDR + 0x970
goto UNZIPED_SIZE_ADDR
get UNZIPED_SIZE long

for i = 1 <= FRAME_COUNT
   set FRAME_INFO_OFFSET i
   math FRAME_INFO_OFFSET * 8
   math FRAME_INFO_OFFSET + 0x96C
   goto FRAME_INFO_OFFSET
   get FRAME_WIDTH short
   get FRAME_HEIGHT short
   putarray 2 i FRAME_WIDTH
   putarray 3 i FRAME_HEIGHT
next i

set ZIP_SIZE_ADDR FRAME_COUNT
math ZIP_SIZE_ADDR * 8
math ZIP_SIZE_ADDR + 0x99C
goto ZIP_SIZE_ADDR
get ZIP_SIZE long

set ZIP_OFFSET ZIP_SIZE_ADDR
math ZIP_OFFSET + 4

comtype zlib
clog TEMPORARY_FILE ZIP_OFFSET ZIP_SIZE UNZIPED_SIZE

Open "." TEMPORARY_FILE

for i = 1 <= FRAME_COUNT
   print "---------------------Frame No. %i% of %FRAME_COUNT%---------------------"
   
   put 0x00 byte MEMORY_FILE1 //identsize;
   put 0x00 byte MEMORY_FILE1 //colurmaptype;
   put 0x02 byte MEMORY_FILE1 // imagetype;
   put 0x0000 short MEMORY_FILE1 // colourmapstart;
   put 0x0000 short MEMORY_FILE1 // colourmaplength;
   put 0x00 byte MEMORY_FILE1 
   put 0x0000 short MEMORY_FILE1 
   put 0x0000 short MEMORY_FILE1 
   getarray FRAME_WIDTH 2 i
   print "FRAMEWIDTH : %FRAME_WIDTH%"
   put FRAME_WIDTH short MEMORY_FILE1 
   getarray FRAME_HEIGHT 3 i
   print "FRAMEHEIGHT : %FRAME_HEIGHT%"
   put FRAME_HEIGHT short MEMORY_FILE1 
   put 0x20 byte MEMORY_FILE1 // bits per pixel
   put 0x28 byte MEMORY_FILE1 // image descriptor (101000)

   getarray CURRENTFRAMEOFFSET 0 i

   If i != FRAME_COUNT
       getarray CURRENTFRAMESIZE 0 (i+1)
       getarray CURRENTFRAMESIZE_BEFORE 0 i
       math CURRENTFRAMESIZE - CURRENTFRAMESIZE_BEFORE
       math CURRENTFRAMESIZE / 4
   Else
       get CURRENTFRAMESIZE asize
       getarray CURRENTFRAMESIZE_BEFORE 0 i
       math CURRENTFRAMESIZE - CURRENTFRAMESIZE_BEFORE
       math CURRENTFRAMESIZE / 4
   Endif

   set GOFURTHER CURRENTFRAMEOFFSET
   goto GOFURTHER

   for j = 0 < CURRENTFRAMESIZE
       set GOFURTHER CURRENTFRAMEOFFSET
       xmath GOFURTHER "GOFURTHER + (j * 4)"
       goto GOFURTHER

       get ALPHA byte
       get RED byte
       get GREEN byte
       get BLUE byte
       if ALPHA == 0x00 && GREEN == 0x00 && BLUE == 0x00
           for k = 0 < RED
               put 0xff byte MEMORY_FILE1
               put 0xff byte MEMORY_FILE1
               put 0xff byte MEMORY_FILE1
               put ALPHA byte MEMORY_FILE1
           next k
       else
           put BLUE byte MEMORY_FILE1
           put GREEN byte MEMORY_FILE1
           put RED byte MEMORY_FILE1
           put ALPHA byte MEMORY_FILE1  
       endif 
   next j

   string TGA_FILE_NAME = FNAME
   string TGA_FILE_NAME += "_"
   string TGA_FILE_NAME += i
   string TGA_FILE_NAME += ".tga"
   get TGA_SIZE asize MEMORY_FILE1
   log TGA_FILE_NAME 0 TGA_SIZE MEMORY_FILE1
   log MEMORY_FILE1 0 0
next i

 

참고해서 패킹 스크립트 짜고 싶은 사람은 짜서 쓰면 된다.

투명화에는 다른거 필요없이 이미지 크기는 변경안하고 TEMPORARY_FILE로 압축해제 된거에서 알파값만 전부다 00으로 바꾸고 다시 저장하면 100% 투명도로 되서 분해된 tga 파일들을 다시 결합하는 스크립트는 안짰다.

추가적으로 math FRAME_INFO_OFFSET + 0x968 로 하고 short 2개 get하면 각각 해당 프레임의 시작X점 시작Y점 이다.

( 예전에는 각 프레임에 투명한 부분을 그대로 저장했는데, 이미지 용량 줄이려고 최소한의 이미지만 담아서 프레임마다 크기가 다르다. )

원래 목적이  연옥술 투명화였던 만큼 따로 TGA 파일들을 결합하는 스크립트는 짜지 않을 예정이고, AK에서 스킬 투명화 옵션을 내놓아 준다면 순정으로 사용할 예정이다.

 

투명화 팁 : 언팩된 메모리에서 불투명도 부분만 수정하면 된다.

A의 값이 아래와 같은 불투명도를 나타냄.

FF = 100%
F2 = 95%
E6 = 90%
D9 = 85%
CC = 80%
BF = 75%
B3 = 70%
A6 = 65%
99 = 60%
8C = 55%
80 = 50%
73 = 45%
66 = 40%
59 = 35%
4D = 30%
40 = 25%
33 = 20%
26 = 15%
1A = 10%
0D = 5%
01 = 0.003% [ 00을 쓰면 00 XX 00 00 과 겹칠 가능성 때문에 이 값으로 지정. 충분히 안보임. ]

 

TEMPORARY_FILE 파일을 4바이트씩 끊어서 00 XX 00 00 인 부분은 그대로 두고 나머지 부분은 A R G B 순에서 A 값은 불투명도를 나타내므로 A를 원하는 투명도로 지정하고 저장한다. 이 부분은 스크립트로 만들면 간단하다.

이후에 아래의 메모리 압축 스크립트를 사용, 만들어진 파일은 1부에서 압축 용량을 나타내는 곳의 용량만 바꾸고 프레임 데이터를 나타내던 부분을  압축된 파일로 내용을 바꾸어 주면 끝이다.

 

get FNAME basename
get FSIZE asize

string UNZIPFILENAME = FNAME
string UNZIPFILENAME += ".zip"
comtype zlib_compress
clog UNZIPFILENAME 0 FSIZE FSIZE

댓글 8
  • 방장 4년 전

    짝짝

  • 강긴리 4년 전(수정됨)

    뭔말인지 모르겠지만...감사합니다!

  • 스알못 비회원 110.92 4년 전

    감사합니다.. 역시 배워야하네요...

  • ㅇㅇ 비회원 122.199 4년 전

    다른 스킬도 다 투명화 가능하단 거쥬?

  • ㅇㅇㄴㅇ 비회원 121.155 4년 전

    선생님, 반응을 하고싶어도, 뭔말인지 몰라 무슨반응을 할지 모르겠습니다만. 우선 감사합니다 ㅋㅋㅋ

  • ㅇㅇ 비회원 182.212 4년 전

    압도적인 감사!!!

  • 월명수 4년 전

    역시 능력자들이 넘쳐나 ㅋㅋ

  • 청춘사진관 4년 전

    능력자시다..ㄷ

빵터지네
59.2
22
6분 전
ㅋㅋㅋㅋ
220.124
17
9분 전
망한이유
222.100
160
4시간 전
ㅋㅋㅋ
220.126
89
5시간 전
서버옮기자
119.196
99
5시간 전
혁꽃비
211.60
159
9시간 전
혁꽃비
125.187
151
10시간 전
호잇
58.238
50
15시간 전
둘둘이
151
하루 전
혁꽃비
222.107
769
하루 전
ㅇㅇ
1.238
218
하루 전
123
220.123
472
하루 전
또랑꼬랑
121
하루 전
미카텐시
14.37
117
하루 전
이진
58.235
98
하루 전
이희진
58.235
127
하루 전
복귀거린이
14.54
154
2일 전
ㅋㅋㅋ
171.255
1162
2일 전
늅비
58.75
199
2일 전
거리니임
124.53
241
2일 전
와죠
234
3일 전
ㅇㅇ
211.234
839
3일 전
히힛
221.157
134
3일 전
신구빵후니
118.235
691
3일 전
둵마티즈웃음벨
121.141
829
4일 전
거린잉
221.157
435
4일 전
카돌지킴이
61.80
1248
4일 전
기노혁꽃비
118.129
1073
4일 전
쪽팔려어어어어
59.2
537
4일 전
뉴뉴비
182.237
183
5일 전
빵터지네
비회원 59.2 6분 전 조회 22
ㅋㅋㅋㅋ
비회원 220.124 9분 전 조회 17
망한이유
비회원 222.100 4시간 전 조회 160
ㅋㅋㅋ
비회원 220.126 5시간 전 조회 89
서버옮기자
비회원 119.196 5시간 전 조회 99
혁꽃비
비회원 211.60 9시간 전 조회 159
혁꽃비
비회원 125.187 10시간 전 조회 151
호잇
비회원 58.238 15시간 전 조회 50
둘둘이
하루 전 조회 151
혁꽃비
비회원 222.107 하루 전 조회 769
ㅇㅇ
비회원 1.238 하루 전 조회 218
123
비회원 220.123 하루 전 조회 472
또랑꼬랑
하루 전 조회 121
미카텐시
비회원 14.37 하루 전 조회 117
이진
비회원 58.235 하루 전 조회 98
이희진
비회원 58.235 하루 전 조회 127
복귀거린이
비회원 14.54 2일 전 조회 154
ㅋㅋㅋ
비회원 171.255 2일 전 조회 1162
늅비
비회원 58.75 2일 전 조회 199
거리니임
비회원 124.53 2일 전 조회 241
와죠
3일 전 조회 234
ㅇㅇ
비회원 211.234 3일 전 조회 839
히힛
비회원 221.157 3일 전 조회 134
신구빵후니
비회원 118.235 3일 전 조회 691
둵마티즈웃음벨
비회원 121.141 4일 전 조회 829
거린잉
비회원 221.157 4일 전 조회 435
카돌지킴이
비회원 61.80 4일 전 조회 1248
기노혁꽃비
비회원 118.129 4일 전 조회 1073
쪽팔려어어어어
비회원 59.2 4일 전 조회 537
뉴뉴비
비회원 182.237 5일 전 조회 183