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 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