mikunyan 3.9.5 → 3.9.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/exe/mikunyan-image +8 -3
- data/exe/mikunyan-json +6 -1
- data/ext/decoders/native/etc.c +2 -2
- data/lib/mikunyan/asset.rb +9 -4
- data/lib/mikunyan/asset_bundle.rb +4 -2
- data/lib/mikunyan/decoders/image_decoder.rb +5 -0
- data/lib/mikunyan/type_tree.rb +2 -1
- data/lib/mikunyan/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24c83afeea0f0885973df9b83ee567538cae38b50b39de7100b7da1a606ae793
|
4
|
+
data.tar.gz: 29349537bbdcde3142274b5a2897811c6259340dbe70094ced8b1fd4eb080825
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e6064b3eb69a4531caaba0eab22f8427f109d77b996819627b66f6e0763536d366b52fe05d8535d9de29a883e5988265ddf374d26a4ed14c6b8b58b8de4f00c
|
7
|
+
data.tar.gz: 7838690615a1709cb2f7d0cdba157f2885c69951e7ea0b25c8db07857323c88814482770b0d52ebe16e59fd4ebd9cfa4d84bdbdf9b02ade6468a9b98c0c7df40
|
data/exe/mikunyan-image
CHANGED
@@ -2,7 +2,12 @@
|
|
2
2
|
require 'mikunyan'
|
3
3
|
require 'mikunyan/decoders'
|
4
4
|
require 'fileutils'
|
5
|
-
|
5
|
+
begin
|
6
|
+
require 'usamin'
|
7
|
+
require 'usamin/overwrite'
|
8
|
+
rescue LoadError
|
9
|
+
require 'json'
|
10
|
+
end
|
6
11
|
|
7
12
|
opts = {:as_asset => false, :outputdir => nil, :sprite => false, :pretty => false}
|
8
13
|
arg = nil
|
@@ -63,8 +68,8 @@ assets.each do |asset|
|
|
63
68
|
unless textures[tex_id]
|
64
69
|
tex_obj = asset.parse_object(tex_id)
|
65
70
|
if tex_obj
|
66
|
-
textures[tex_id] = Mikunyan::ImageDecoder.decode_object(tex_obj)
|
67
|
-
json[tex_id] = {:name => tex_obj.m_Name.value, :width => textures[tex_id].width, :height => textures[tex_id].height, :path_id => tex_id, :sprites => []}
|
71
|
+
textures[tex_id] = Mikunyan::ImageDecoder.decode_object(tex_obj)
|
72
|
+
json[tex_id] = {:name => tex_obj.m_Name.value, :width => textures[tex_id].width, :height => textures[tex_id].height, :path_id => tex_id, :sprites => []} if textures[tex_id]
|
68
73
|
end
|
69
74
|
end
|
70
75
|
|
data/exe/mikunyan-json
CHANGED
@@ -74,7 +74,12 @@ if opts[:yaml]
|
|
74
74
|
require 'yaml'
|
75
75
|
puts YAML.dump(assets)
|
76
76
|
else
|
77
|
-
|
77
|
+
begin
|
78
|
+
require 'usamin'
|
79
|
+
require 'usamin/overwrite'
|
80
|
+
rescue LoadError
|
81
|
+
require 'json'
|
82
|
+
end
|
78
83
|
assets = assets.map{|k, v| [k, obj64(v)]}.to_h
|
79
84
|
if opts[:pretty]
|
80
85
|
puts JSON.pretty_generate(assets)
|
data/ext/decoders/native/etc.c
CHANGED
@@ -158,8 +158,8 @@ static inline void decode_etc2_block(const uint8_t *data, uint32_t *outbuf) {
|
|
158
158
|
c[2][0] = data[5] << 5 & 0xe0 | data[6] >> 3 & 0x1c | data[5] >> 1 & 3;
|
159
159
|
c[2][1] = data[6] << 3 & 0xf8 | data[7] >> 5 & 0x6 | data[6] >> 4 & 1;
|
160
160
|
c[2][2] = data[7] << 2 | data[7] >> 4 & 3;
|
161
|
-
for (int
|
162
|
-
for (int
|
161
|
+
for (int y = 0, i = 0; y < 4; y++) {
|
162
|
+
for (int x = 0; x < 4; x++, i++) {
|
163
163
|
uint8_t r = clamp((x * (c[1][0] - c[0][0]) + y * (c[2][0] - c[0][0]) + 4 * c[0][0] + 2) >> 2);
|
164
164
|
uint8_t g = clamp((x * (c[1][1] - c[0][1]) + y * (c[2][1] - c[0][1]) + 4 * c[0][1] + 2) >> 2);
|
165
165
|
uint8_t b = clamp((x * (c[1][2] - c[0][2]) + y * (c[2][2] - c[0][2]) + 4 * c[0][2] + 2) >> 2);
|
data/lib/mikunyan/asset.rb
CHANGED
@@ -10,7 +10,7 @@ module Mikunyan
|
|
10
10
|
# @attr_reader [Array<Integer>] add_ids ?
|
11
11
|
# @attr_reader [Array<Mikunyan::Asset::Reference>] references reference data
|
12
12
|
class Asset
|
13
|
-
attr_reader :name, :format, :generator_version, :target_platform, :endian, :klasses, :objects, :add_ids, :references
|
13
|
+
attr_reader :name, :format, :generator_version, :target_platform, :endian, :klasses, :objects, :add_ids, :references, :res_s
|
14
14
|
|
15
15
|
# Struct for representing Asset class definition
|
16
16
|
# @attr [Integer] class_id class ID
|
@@ -40,9 +40,10 @@ module Mikunyan
|
|
40
40
|
# Load Asset from binary string
|
41
41
|
# @param [String] bin binary data
|
42
42
|
# @param [String] name Asset name
|
43
|
+
# @param [String] res_s resS data
|
43
44
|
# @return [Mikunyan::Asset] deserialized Asset object
|
44
|
-
def self.load(bin, name)
|
45
|
-
r = Asset.new(name)
|
45
|
+
def self.load(bin, name, res_s = nil)
|
46
|
+
r = Asset.new(name, res_s)
|
46
47
|
r.send(:load, bin)
|
47
48
|
r
|
48
49
|
end
|
@@ -123,9 +124,10 @@ module Mikunyan
|
|
123
124
|
|
124
125
|
private
|
125
126
|
|
126
|
-
def initialize(name)
|
127
|
+
def initialize(name, res_s = nil)
|
127
128
|
@name = name
|
128
129
|
@endian = :big
|
130
|
+
@res_s = res_s
|
129
131
|
end
|
130
132
|
|
131
133
|
def load(bin)
|
@@ -245,6 +247,9 @@ module Mikunyan
|
|
245
247
|
else
|
246
248
|
r.value = parse_object_private(br, children[0]).value
|
247
249
|
end
|
250
|
+
elsif node.type == 'StreamingInfo'
|
251
|
+
children.each{|child| r[child[:name]] = parse_object_private(br, child)}
|
252
|
+
r.value = @res_s.byteslice(r['offset'].value, r['size'].value) if r['path'].value == "archive:/#{name}/#{name}.resS"
|
248
253
|
else
|
249
254
|
children.each do |child|
|
250
255
|
r[child[:name]] = parse_object_private(br, child)
|
@@ -84,11 +84,13 @@ module Mikunyan
|
|
84
84
|
asset_count = head.i32u
|
85
85
|
asset_count.times{ asset_blocks << {:offset => head.i64u, :size => head.i64u, :status => head.i32, :name => head.cstr} }
|
86
86
|
|
87
|
-
raw_data =
|
87
|
+
raw_data = String.new
|
88
88
|
blocks.each{|b| raw_data << uncompress(br.read(b[:c]), b[:u], b[:f])}
|
89
89
|
|
90
90
|
asset_blocks.each do |b|
|
91
|
-
|
91
|
+
next if b[:name].end_with?('.resS')
|
92
|
+
res_s = asset_blocks.find{|e| e[:name] == "#{b[:name]}.resS"}
|
93
|
+
asset = Asset.load(raw_data.byteslice(b[:offset], b[:size]), b[:name], res_s && raw_data.byteslice(res_s[:offset], res_s[:size]))
|
92
94
|
@assets << asset
|
93
95
|
end
|
94
96
|
end
|
data/lib/mikunyan/type_tree.rb
CHANGED
@@ -22,7 +22,8 @@ module Mikunyan
|
|
22
22
|
node_count = br.i32u
|
23
23
|
buffer_size = br.i32u
|
24
24
|
node_count.times do
|
25
|
-
|
25
|
+
node = Node.new(br.i16u, br.i8u, br.i8u != 0, br.i32, br.i32, br.i32, br.i32u, br.i32u)
|
26
|
+
nodes << node
|
26
27
|
end
|
27
28
|
buffer = br.read(buffer_size)
|
28
29
|
nodes.each do |n|
|
data/lib/mikunyan/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mikunyan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.9.
|
4
|
+
version: 3.9.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ishotihadus
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: extlz4
|