feh-bin 0.1.3 → 0.2.0

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: 12f43b8f3478cbe44da84b86aedbbba2777cc505095841d3b81862c53df40d32
4
- data.tar.gz: e06d68f95ad4bdc8675fc2dc9a4b46349c556a01fd0119907954c351a3b451a3
3
+ metadata.gz: 74bef714ca93f4872ed31bbcab86aebf0ce0cbb9a21737e5db97163a232b5a7c
4
+ data.tar.gz: 9e4da872f92c073dc081f2225f5c0e873a5845641f823e453925a4c9e8b0ff19
5
5
  SHA512:
6
- metadata.gz: 5933e1059ebe9af2e92b33d6102af96ceb45b6b8fb639b041d8a7f38c7017057a278ae9164e04729c7c0866fdc8b575709980c8b5b13b21acaacd94f10003195
7
- data.tar.gz: 95a60737d73dd0e0c26ef99a03310e436a656045b1da27f6148102db6d570f17a4c8f0b8f6ae1bda2c525b677a543f2dfa1e074be8e0ec0ff08c5ce7b7d037ca
6
+ metadata.gz: ac92ed5505d6d191209effa0013de9337cd59a7467896fce74303bea59bff67328fcf8bae9ff520afd7e4d9ccdf070979c0b0c57ddc826bec2eab588beccc6e3
7
+ data.tar.gz: 52d400fc11d3f0f2f5e3e190ddec725cb3930e645fbb760e6e36b56061d111f22a3f151640632769ee1b73a6d3ee646ea51a667dd0f5eaf795688072ee0351ef
data/.gitignore CHANGED
File without changes
data/Gemfile CHANGED
File without changes
data/Gemfile.lock CHANGED
@@ -1,22 +1,22 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- feh-bin (0.1.2)
4
+ feh-bin (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- minitest (5.11.3)
10
- rake (10.5.0)
9
+ minitest (5.18.0)
10
+ rake (13.0.6)
11
11
 
12
12
  PLATFORMS
13
- ruby
13
+ x86_64-linux
14
14
 
15
15
  DEPENDENCIES
16
- bundler (~> 1.16)
16
+ bundler
17
17
  feh-bin!
18
- minitest (~> 5.0)
19
- rake (~> 10.0)
18
+ minitest
19
+ rake
20
20
 
21
21
  BUNDLED WITH
22
- 1.16.5
22
+ 2.4.6
data/LICENSE.txt CHANGED
File without changes
data/README.md CHANGED
@@ -16,6 +16,12 @@ To convert `a.bin` to `a.bin.lz`, and `b.bin.lz` to `b.bin`:
16
16
  $ feh_bin_lz a.bin b.bin.lz
17
17
  ```
18
18
 
19
+ If it takes too long to compress a file, try adding `-s` anywhere:
20
+
21
+ ```
22
+ $ feh_bin_lz -s very_large_file.bin
23
+ ```
24
+
19
25
  ## Library example
20
26
 
21
27
  ```ruby
@@ -28,6 +34,15 @@ end
28
34
 
29
35
  ## Changelog
30
36
 
37
+ ### V0.2.0
38
+
39
+ - Fix `<internal:pack>:8: warning: unknown pack directive '<' in '<l'` message
40
+ - Allow use of Bundler 2.x
41
+
42
+ ### V0.1.4
43
+
44
+ - Added command line option `-s` to `feh_bin_lz` which skips LZ11 compression
45
+
31
46
  ### V0.1.3
32
47
 
33
48
  - Added read support for non-LZ11-compressed .bin.lz files
data/Rakefile CHANGED
File without changes
data/bin/feh_bin_lz CHANGED
@@ -3,13 +3,27 @@
3
3
  require 'feh/bin'
4
4
 
5
5
  DESC = "Fire Emblem Heroes assets converter
6
- Usage: #{File.basename(__FILE__)} <files>...
6
+ Usage: #{File.basename(__FILE__)} [OPTION] <files>...
7
7
 
8
8
  Files ending in .bin.lz are converted to .bin; all other files are converted
9
- into .bin.lz."
9
+ into .bin.lz.
10
+
11
+ Options:
12
+ -s Only encrypt files, do not compress using LZ11"
10
13
 
11
14
  abort DESC if ARGV.empty? || ARGV.include?('-?') || ARGV.include?('--help')
12
15
 
16
+ $no_compress = false
17
+
18
+ ARGV.select {|opt| opt.start_with? '-'}.each do |opt|
19
+ case opt
20
+ when '-s'
21
+ $no_compress = true
22
+ end
23
+ end
24
+
25
+ ARGV.reject! {|opt| opt.start_with? '-'}
26
+
13
27
  ARGV.each do |fname|
14
28
  begin
15
29
  buf = IO.binread(fname)
@@ -24,7 +38,7 @@ ARGV.each do |fname|
24
38
  outname = File.expand_path(
25
39
  File.basename(fname, '.*') + '.bin.lz', File.dirname(fname))
26
40
  puts "Compressing #{fname} -> #{outname}..."
27
- res = Feh::Bin.compress(buf)
41
+ res = Feh::Bin.compress(buf, $no_compress)
28
42
  raise RuntimeError, res.to_s if res.is_a?(Symbol)
29
43
  IO.binwrite(outname, res.pack('c*'))
30
44
  end
data/feh-bin.gemspec CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.require_paths = ["lib"]
23
23
  spec.extra_rdoc_files = ['README.md']
24
24
 
25
- spec.add_development_dependency "bundler", "~> 1.16"
26
- spec.add_development_dependency "rake", "~> 10.0"
27
- spec.add_development_dependency "minitest", "~> 5.0"
25
+ spec.add_development_dependency "bundler", "~> 2"
26
+ spec.add_development_dependency "rake", "~> 13"
27
+ spec.add_development_dependency "minitest", "~> 5"
28
28
  end
data/fuzz/fuzz_feh_bin.rb CHANGED
File without changes
File without changes
@@ -5,7 +5,6 @@ require 'forwardable'
5
5
  module Feh module Bin
6
6
  # Single-pass output array stream that writes little-endian integers.
7
7
  class ArrayOStream
8
-
9
8
  # @return [Array<Integer>] the stream content
10
9
  def buf
11
10
  @buf.dup
data/lib/feh/bin/lz11.rb CHANGED
File without changes
@@ -1,6 +1,6 @@
1
1
  module Feh
2
2
  module Bin
3
3
  # Version number.
4
- VERSION = "0.1.3"
4
+ VERSION = "0.2.0"
5
5
  end
6
6
  end
data/lib/feh/bin.rb CHANGED
@@ -17,13 +17,18 @@ module Feh
17
17
 
18
18
  # Compresses data into a .bin.lz file.
19
19
  # @param buf [Array<Integer>, String] content of the data to compress
20
+ # @param no_compress [Boolean] true if LZ11 is not used to compress the data
20
21
  # @return [Array<Integer>] content of the .bin.lz file
21
22
  # @return [Symbol] error code if the input is not a valid data buffer
22
- def self.compress(buf)
23
+ def self.compress(buf, no_compress = false)
23
24
  buf = buf.bytes if buf.is_a?(String)
24
- buf2 = LZ11.new(buf).compress
25
- return buf2 if buf2.is_a?(Symbol)
26
- write_bin_lz(buf2, buf.size)
25
+ if no_compress
26
+ write_bin_lz04(buf, buf.size)
27
+ else
28
+ buf2 = LZ11.new(buf).compress
29
+ return buf2 if buf2.is_a?(Symbol)
30
+ write_bin_lz(buf2, buf.size)
31
+ end
27
32
  end
28
33
 
29
34
  # Unpacks a Fire Emblem Heroes .bin.lz file.
@@ -35,7 +40,7 @@ module Feh
35
40
  header = buf.shift(4)
36
41
  xorseed = header[1] | (header[2] << 8) | (header[3] << 16)
37
42
  if (header.first & 0xFF) == 0x17 && (buf.first & 0xFF) == 0x11
38
- xorkey = [0x8083 * xorseed].pack('<I').bytes
43
+ xorkey = [0x8083 * xorseed].pack('l<').bytes
39
44
  (4...buf.size).step(4).each do |i|
40
45
  4.times {|j| buf[i + j] ^= xorkey[j]}
41
46
  4.times {|j| xorkey[j] ^= buf[i + j]}
@@ -56,7 +61,7 @@ module Feh
56
61
  header = buf.shift(4)
57
62
  xorseed = header[1] | (header[2] << 8) | (header[3] << 16)
58
63
  if header.first == 0x04 && xorseed == buf.size
59
- xorkey = [0x8083 * xorseed].pack('<I').bytes
64
+ xorkey = [0x8083 * xorseed].pack('l<').bytes
60
65
  (0...buf.size).step(4).each do |i|
61
66
  4.times {|j| buf[i + j] ^= xorkey[j]}
62
67
  4.times {|j| xorkey[j] ^= buf[i + j]}
@@ -75,13 +80,31 @@ module Feh
75
80
  bytes = bytes.bytes if bytes.is_a?(String)
76
81
  bytes += [0] * ((-bytes.size) % 4)
77
82
  xorseed = bytes.size if xorseed.nil?
78
- header = [xorseed * 0x100 + 0x17].pack('<I').bytes
79
- xorkey = [0x8083 * xorseed].pack('<I').bytes
83
+ header = [xorseed * 0x100 + 0x17].pack('l<').bytes
84
+ xorkey = [0x8083 * xorseed].pack('l<').bytes
80
85
  4.times {|j| bytes[4 + j] ^= xorkey[j]}
81
86
  (8...bytes.size).step(4).each do |i|
82
87
  4.times {|j| bytes[i + j] ^= bytes[i - 4 + j]}
83
88
  end
84
89
  header + bytes
85
90
  end
91
+
92
+ # Packs a Fire Emblem Heroes .bin.lz file.
93
+ # Used for files that are XOR-encrypted for FEH but not LZ11-compressed.
94
+ # @param bytes [Array<Integer>, String] content of an archive
95
+ # @param xorseed [Integer, nil] optional XOR encryption value
96
+ # @return [Array<Integer>] content of the packed .bin.lz file
97
+ def self.write_bin_lz04(bytes, xorseed = nil)
98
+ bytes = bytes.bytes if bytes.is_a?(String)
99
+ bytes += [0] * ((-bytes.size) % 4)
100
+ xorseed = bytes.size if xorseed.nil?
101
+ header = [xorseed * 0x100 + 0x04].pack('l<').bytes
102
+ xorkey = [0x8083 * xorseed].pack('l<').bytes
103
+ 4.times {|j| bytes[j] ^= xorkey[j]}
104
+ (4...bytes.size).step(4).each do |i|
105
+ 4.times {|j| bytes[i + j] ^= bytes[i - 4 + j]}
106
+ end
107
+ header + bytes
108
+ end
86
109
  end
87
110
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feh-bin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Quinton Miller
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-09 00:00:00.000000000 Z
11
+ date: 2023-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
19
+ version: '2'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.16'
26
+ version: '2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.0'
47
+ version: '5'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.0'
54
+ version: '5'
55
55
  description: Functions to compress and decompress binary asset files from Fire Emblem
56
56
  Heroes
57
57
  email:
@@ -80,7 +80,7 @@ homepage: https://github.com/HertzDevil/feh-bin
80
80
  licenses:
81
81
  - MIT
82
82
  metadata: {}
83
- post_install_message:
83
+ post_install_message:
84
84
  rdoc_options: []
85
85
  require_paths:
86
86
  - lib
@@ -95,9 +95,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  requirements: []
98
- rubyforge_project:
99
- rubygems_version: 2.7.6
100
- signing_key:
98
+ rubygems_version: 3.4.6
99
+ signing_key:
101
100
  specification_version: 4
102
101
  summary: Conversion routines for Fire Emblem Heroes asset files
103
102
  test_files: []