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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d98bb997b5988424bf6ac0a0f116965bbd4cb5959bde3cad40541143872ab93
4
- data.tar.gz: d77ddb35f213bd0d0729dfe9b53b2f6fa125687b2e89a79fbe876a72a8a7d7a7
3
+ metadata.gz: 24c83afeea0f0885973df9b83ee567538cae38b50b39de7100b7da1a606ae793
4
+ data.tar.gz: 29349537bbdcde3142274b5a2897811c6259340dbe70094ced8b1fd4eb080825
5
5
  SHA512:
6
- metadata.gz: 839775366553bae8d90525e47088cbe9d42c59638ffcd1964411f7b006af89b6eb9893392be81b456ce599678155c87213c1a59a4c79759990b2a5724c89b3a0
7
- data.tar.gz: 8138498cac6cd2a845321be929e936520e2f535a5195dad604561bd98f021a5ce2463219fb8996a7a2cd8f05dfbf90370487b12620bbf91e1e4b4c85dfe25cd7
6
+ metadata.gz: 9e6064b3eb69a4531caaba0eab22f8427f109d77b996819627b66f6e0763536d366b52fe05d8535d9de29a883e5988265ddf374d26a4ed14c6b8b58b8de4f00c
7
+ data.tar.gz: 7838690615a1709cb2f7d0cdba157f2885c69951e7ea0b25c8db07857323c88814482770b0d52ebe16e59fd4ebd9cfa4d84bdbdf9b02ade6468a9b98c0c7df40
@@ -2,7 +2,12 @@
2
2
  require 'mikunyan'
3
3
  require 'mikunyan/decoders'
4
4
  require 'fileutils'
5
- require 'json'
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) if 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
 
@@ -74,7 +74,12 @@ if opts[:yaml]
74
74
  require 'yaml'
75
75
  puts YAML.dump(assets)
76
76
  else
77
- require 'json'
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)
@@ -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 x = 3, i = 0; x >= 0; x--) {
162
- for (int y = 3; y >= 0; y--, i++) {
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);
@@ -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
- asset = Asset.load(raw_data.byteslice(b[:offset], b[:size]), b[:name])
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
@@ -23,6 +23,11 @@ module Mikunyan
23
23
  bin = bin.value
24
24
  fmt = fmt.value
25
25
 
26
+ if bin.size == 0 && object['m_StreamData']
27
+ bin = object['m_StreamData'].value
28
+ return nil unless bin
29
+ end
30
+
26
31
  case fmt
27
32
  when 1
28
33
  decode_a8(width, height, bin)
@@ -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
- nodes << Node.new(br.i16u, br.i8u, br.i8u != 0, br.i32, br.i32, br.i32, br.i32u, br.i32u)
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|
@@ -1,4 +1,4 @@
1
1
  module Mikunyan
2
2
  # version string
3
- VERSION = "3.9.5"
3
+ VERSION = "3.9.6"
4
4
  end
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.5
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-05-27 00:00:00.000000000 Z
11
+ date: 2018-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: extlz4