nis_gfx 0.2
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.
- data/bin/nis_gfx +29 -0
- data/lib/nis_gfx.rb +134 -0
- data/nis_gfx.gemspec +12 -0
- metadata +67 -0
data/bin/nis_gfx
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'nis_gfx.rb'
|
4
|
+
|
5
|
+
if ARGV.size == 8 and ARGV[0] == 'nis2png'
|
6
|
+
NIS::Graphics.nis2png(
|
7
|
+
ARGV[1], # nisname
|
8
|
+
ARGV[2].to_i, # width
|
9
|
+
ARGV[3].to_i, # height
|
10
|
+
ARGV[4].to_i, # bpp
|
11
|
+
(ARGV[5].upcase == 'T') ? true : false, # tile?
|
12
|
+
ARGV[6].to_i(16), # o_data
|
13
|
+
ARGV[7].to_i(16) # o_pal
|
14
|
+
)
|
15
|
+
elsif ARGV.size == 5 and ARGV[0] = 'png2nis'
|
16
|
+
NIS::Graphics.png2nis(
|
17
|
+
ARGV[1], # nisname
|
18
|
+
ARGV[2].to_i, # bpp
|
19
|
+
(ARGV[3].upcase == 'T') ? true : false, # tile?
|
20
|
+
ARGV[4].to_i(16), # o_data
|
21
|
+
ARGV[5].to_i(16) # o_pal
|
22
|
+
)
|
23
|
+
else
|
24
|
+
puts 'NIS<->PNG Graphics Converter'
|
25
|
+
puts 'Author: tonypolik 02/11/2010'
|
26
|
+
puts 'Usage:'
|
27
|
+
puts ' ' + File.basename($0) + ' nis2png w h bpp tile? o_pal o_data'
|
28
|
+
puts ' ' + File.basename($0) + ' png2nis bpp tile? o_pal o_data'
|
29
|
+
end
|
data/lib/nis_gfx.rb
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'chunky_png'
|
2
|
+
|
3
|
+
|
4
|
+
module NIS
|
5
|
+
module Graphics
|
6
|
+
|
7
|
+
|
8
|
+
def self.nis2png nisname,w,h,bpp,tiled,o_pal,o_data
|
9
|
+
nis = File.new(nisname,"rb")
|
10
|
+
# get palette
|
11
|
+
nis.pos = o_pal
|
12
|
+
palette = []
|
13
|
+
(2**bpp).times do
|
14
|
+
palette << ChunkyPNG::Color.rgba(
|
15
|
+
nis.getbyte,
|
16
|
+
nis.getbyte,
|
17
|
+
nis.getbyte,
|
18
|
+
nis.getbyte
|
19
|
+
)
|
20
|
+
end
|
21
|
+
# get indexes
|
22
|
+
img = ChunkyPNG::Image.new(w, h)
|
23
|
+
nis.pos = o_data
|
24
|
+
case [bpp, tiled]
|
25
|
+
when [4, true]
|
26
|
+
raise if img.height % 8 != 0
|
27
|
+
raise if img.width % 32 != 0
|
28
|
+
num_tiley = img.height / 8
|
29
|
+
num_tilex = img.width / 32
|
30
|
+
num_tiley.times do |tiley|
|
31
|
+
num_tilex.times do |tilex|
|
32
|
+
8.times do |tile_y|
|
33
|
+
16.times do |tile_x|
|
34
|
+
byte = nis.getbyte
|
35
|
+
x = tilex*32 + tile_x*2
|
36
|
+
y = tiley*8 + tile_y
|
37
|
+
img[x+1,y] = palette[ (byte & 0xF0)>>4 ]
|
38
|
+
img[x,y] = palette[ byte & 0x0F ]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
when [4, false]
|
44
|
+
raise if img.width % 2 != 0
|
45
|
+
img.height.times do |y|
|
46
|
+
(img.width / 2).times do |x|
|
47
|
+
byte = nis.getbyte
|
48
|
+
img[x*2+1,y] = palette[ (byte & 0xF0)>>4 ]
|
49
|
+
img[x*2,y] = palette[ byte & 0x0F ]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
when [8, true]
|
53
|
+
raise if img.height % 8 != 0
|
54
|
+
raise if img.width % 16 != 0
|
55
|
+
num_tiley = img.height / 8
|
56
|
+
num_tilex = img.width / 16
|
57
|
+
num_tiley.times do |tiley|
|
58
|
+
num_tilex.times do |tilex|
|
59
|
+
8.times do |tile_y|
|
60
|
+
16.times do |tile_x|
|
61
|
+
x = tilex*16 + tile_x
|
62
|
+
y = tiley*8 + tile_y
|
63
|
+
img[x,y] = palette[nis.getbyte]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
when [8, false]
|
69
|
+
img.height.times do |y|
|
70
|
+
img.width.times do |x|
|
71
|
+
img[x,y] = palette[nis.getbyte]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
else
|
75
|
+
raise
|
76
|
+
end
|
77
|
+
nis.close
|
78
|
+
img.save(
|
79
|
+
nisname + ".png",
|
80
|
+
:filtering => ChunkyPNG::FILTER_NONE )
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
def self.png2nis pngname,bpp,tiled,o_pal,o_data
|
85
|
+
ds = ChunkyPNG::Datastream.from_file(pngname)
|
86
|
+
raise if ds.header_chunk.depth > bpp
|
87
|
+
plte = ds.palette_chunk.content
|
88
|
+
trns = ds.transparency_chunk.content
|
89
|
+
palette = "".force_encoding('binary')
|
90
|
+
|
91
|
+
trns.bytesize.times do |i|
|
92
|
+
palette << (plte[i*3] + plte[i*3+1] + plte[i*3+2] + trns[i])
|
93
|
+
end
|
94
|
+
trns.bytesize.upto(plte.bytesize / 3 - 1) do |i|
|
95
|
+
palette << (plte[i*3] + plte[i*3+1] + plte[i*3+2] + 255.chr)
|
96
|
+
end
|
97
|
+
|
98
|
+
nis = File.new(pngname.chomp(".png"), "rb+")
|
99
|
+
nis.pos = o_pal
|
100
|
+
nis.write palette
|
101
|
+
|
102
|
+
palette = palette.unpack("N*")
|
103
|
+
|
104
|
+
img = ChunkyPNG::Image.from_datastream(ds)
|
105
|
+
nis.pos = o_data
|
106
|
+
case [bpp, tiled]
|
107
|
+
when [4, true]
|
108
|
+
raise if img.height % 8 != 0
|
109
|
+
raise if img.width % 32 != 0
|
110
|
+
num_tiley = img.height / 8
|
111
|
+
num_tilex = img.width / 32
|
112
|
+
num_tiley.times do |tiley|
|
113
|
+
num_tilex.times do |tilex|
|
114
|
+
8.times do |tile_y|
|
115
|
+
16.times do |tile_x|
|
116
|
+
x = tilex*32 + tile_x*2
|
117
|
+
y = tiley*8 + tile_y
|
118
|
+
sx = palette.index(img[x+1,y])
|
119
|
+
dx = palette.index(img[x,y])
|
120
|
+
nis.putc(sx<<4 | dx)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
nis.close
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
end
|
134
|
+
end
|
data/nis_gfx.gemspec
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "nis_gfx"
|
3
|
+
s.version = "0.2"
|
4
|
+
s.author = "tonypolik"
|
5
|
+
s.email = "tonypolik@fastwebnet.it"
|
6
|
+
s.homepage = "http://www.cetramod.it"
|
7
|
+
s.description = "Graphics utilities for NIS images"
|
8
|
+
s.files = Dir.glob('**/*')
|
9
|
+
s.required_ruby_version = ">= 1.9"
|
10
|
+
s.executable = "nis_gfx"
|
11
|
+
s.summary = "Graphics utilities for NIS images"
|
12
|
+
end
|
metadata
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nis_gfx
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
version: "0.2"
|
9
|
+
platform: ruby
|
10
|
+
authors:
|
11
|
+
- tonypolik
|
12
|
+
autorequire:
|
13
|
+
bindir: bin
|
14
|
+
cert_chain: []
|
15
|
+
|
16
|
+
date: 2010-11-02 00:00:00 +01:00
|
17
|
+
default_executable:
|
18
|
+
dependencies: []
|
19
|
+
|
20
|
+
description: Graphics utilities for NIS images
|
21
|
+
email: tonypolik@fastwebnet.it
|
22
|
+
executables:
|
23
|
+
- nis_gfx
|
24
|
+
extensions: []
|
25
|
+
|
26
|
+
extra_rdoc_files: []
|
27
|
+
|
28
|
+
files:
|
29
|
+
- bin/nis_gfx
|
30
|
+
- nis_gfx.gemspec
|
31
|
+
- nis_gfx-0.2.gem
|
32
|
+
- lib/nis_gfx.rb
|
33
|
+
has_rdoc: true
|
34
|
+
homepage: http://www.cetramod.it
|
35
|
+
licenses: []
|
36
|
+
|
37
|
+
post_install_message:
|
38
|
+
rdoc_options: []
|
39
|
+
|
40
|
+
require_paths:
|
41
|
+
- lib
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
segments:
|
48
|
+
- 1
|
49
|
+
- 9
|
50
|
+
version: "1.9"
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
segments:
|
57
|
+
- 0
|
58
|
+
version: "0"
|
59
|
+
requirements: []
|
60
|
+
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 1.3.7
|
63
|
+
signing_key:
|
64
|
+
specification_version: 3
|
65
|
+
summary: Graphics utilities for NIS images
|
66
|
+
test_files: []
|
67
|
+
|