mikunyan 3.9.5 → 3.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|