punkmaker 0.1.0 → 0.3.0

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: 5bf9cd83ed36a867c73df5c98ae5876ff6cf6763f4c8b35bb6facf05d045605b
4
- data.tar.gz: 176da988ba69f6f333e3e5a50f831ae0a0ea963e7ce64d89145d1307cb17fd7d
3
+ metadata.gz: '090cd7aef96630d9965d356c07f5ee4ee2f10646e004ce04d33b818e6f14fe9d'
4
+ data.tar.gz: 18845296d5fb06f19ade59f9b9b247bd6e8034ee1a3b9771e4144eb08e98e282
5
5
  SHA512:
6
- metadata.gz: 02efe3a67627eb1e52bf5f13df29ed17ceb529e61c32730e9d57597d2a31cdf1dc9da5be9c27de4678048a10affa20b6eace0e37d3f8d6564117ff3a59fe699a
7
- data.tar.gz: 8f6b37d89179adcc4b55608044d37283cbcf27aa897fe0ab5756e5b0b0c76e76f9f9263e159e3909da01d594d7d7f0755ce771c0369b277d5e3d378190f86666
6
+ metadata.gz: 9fae8313d6eb3617e4a24815dfa2ace0edd8a06ff878583425bb9611e0adea29a033ab7c143639fbfffc4c82a064b56e4e92255ca03184297870806b5e8b0794
7
+ data.tar.gz: 47ac27f962d02de05919e42b1289e4acb06723548ac66c32277f1fd0a718b62e1fd72e1accac07eeb74c49c0e6bbf9f3fb0ddd76f0b8be94093b2a762a97f4fd
data/CHANGELOG.md CHANGED
@@ -1,3 +1,4 @@
1
+ ### 0.3.0
1
2
  ### 0.0.1 / 2023-04-20
2
3
 
3
4
  * Everything is new. First release
data/Manifest.txt CHANGED
@@ -2,11 +2,36 @@ CHANGELOG.md
2
2
  Manifest.txt
3
3
  README.md
4
4
  Rakefile
5
+ config/alien-female.png
6
+ config/alien-male.png
7
+ config/ape-female.png
8
+ config/ape-male.png
9
+ config/demon-female.png
10
+ config/demon-male.png
5
11
  config/human-female4.png
6
12
  config/human-male4.png
7
13
  config/mummy-female.png
8
14
  config/mummy-male.png
15
+ config/orc-female.png
16
+ config/orc-male.png
17
+ config/robot-female.png
18
+ config/robot-male.png
19
+ config/skeleton-female.png
20
+ config/skeleton-male.png
21
+ config/vampire-female.png
22
+ config/vampire-male.png
23
+ config/zombie-female.png
24
+ config/zombie-male.png
9
25
  lib/punkmaker.rb
26
+ lib/punkmaker/alien.rb
27
+ lib/punkmaker/ape.rb
28
+ lib/punkmaker/demon.rb
29
+ lib/punkmaker/hair.rb
10
30
  lib/punkmaker/human.rb
11
31
  lib/punkmaker/mummy.rb
32
+ lib/punkmaker/orc.rb
33
+ lib/punkmaker/robot.rb
34
+ lib/punkmaker/skeleton.rb
35
+ lib/punkmaker/vampire.rb
12
36
  lib/punkmaker/version.rb
37
+ lib/punkmaker/zombie.rb
data/README.md CHANGED
@@ -4,13 +4,14 @@ punkmaker gem - make your own (pixel) punk base (archetype) heads incl. humans,
4
4
 
5
5
 
6
6
 
7
- * home :: [github.com/cryptopunksnotdead/cryptopunks](https://github.com/cryptopunksnotdead/cryptopunks)
8
- * bugs :: [github.com/cryptopunksnotdead/cryptopunks/issues](https://github.com/cryptopunksnotdead/cryptopunks/issues)
7
+ * home :: [github.com/cryptopunksnotdead/punkart.sandbox](https://github.com/cryptopunksnotdead/punkart.sandbox)
8
+ * bugs :: [github.com/cryptopunksnotdead/punkart.sandbox/issues](https://github.com/cryptopunksnotdead/punkart.sandbox/issues)
9
9
  * gem :: [rubygems.org/gems/punkmaker](https://rubygems.org/gems/punkmaker)
10
10
  * rdoc :: [rubydoc.info/gems/punkmaker](http://rubydoc.info/gems/punkmaker)
11
11
 
12
12
 
13
13
 
14
+
14
15
  ## Usage
15
16
 
16
17
  Let's make golden punks...
@@ -20,8 +21,6 @@ require 'punkmaker'
20
21
 
21
22
  GOLD = '#ffd700'
22
23
 
23
- ###
24
- # humans
25
24
  punk_m = Punk::Human.make( GOLD, gender: 'm' )
26
25
  punk_m.save( 'human-male_gold.png' )
27
26
  punk_m.zoom(4).save( 'human-male_gold@4x.png' )
@@ -29,16 +28,6 @@ punk_m.zoom(4).save( 'human-male_gold@4x.png' )
29
28
  punk_f = Punk::Human.make( GOLD, gender: 'f' )
30
29
  punk_f.save( 'human-female_gold.png' )
31
30
  punk_f.zoom(4).save( 'human-female_gold@4x.png' )
32
-
33
- ###
34
- # mummies
35
- punk_m = Punk::Mummy.make( GOLD, gender: 'm' )
36
- punk_m.save( 'mummy-male_gold.png' )
37
- punk_m.zoom(4).save( 'mummy-male_gold@4x.png' )
38
-
39
- punk_f = Punk::Mummy.make( GOLD, gender: 'f' )
40
- punk_f.save( 'mummy-female_gold.png' )
41
- punk_f.zoom(4).save( 'mummy-female_gold@4x.png' )
42
31
  ```
43
32
 
44
33
 
@@ -47,17 +36,247 @@ Voila!
47
36
  ![](i/human-male_gold.png)
48
37
  ![](i/human-female_gold.png)
49
38
 
50
- ![](i/mummy-male_gold.png)
51
- ![](i/mummy-female_gold.png)
52
-
53
39
  4x
54
40
 
55
41
  ![](i/human-male_gold@4x.png)
56
42
  ![](i/human-female_gold@4x.png)
57
43
 
58
- ![](i/mummy-male_gold@4x.png)
44
+
45
+
46
+ Let's try some more base (arche)types:
47
+
48
+ ``` ruby
49
+ types = [
50
+ Punk::Mummy,
51
+ Punk::Alien,
52
+ Punk::Ape,
53
+ Punk::Skeleton,
54
+ Punk::Zombie,
55
+ Punk::Demon,
56
+ Punk::Orc,
57
+ Punk::Robot,
58
+ Punk::Vampire,
59
+ ]
60
+
61
+ types.each do |type|
62
+ ## get last name e.g. Orc from Punk::Orc
63
+ name = type.name.split('::')[-1].downcase
64
+
65
+ punk_m = type.make( GOLD, gender: 'm' )
66
+ punk_m.save( "#{name}-male_gold.png" )
67
+ punk_m.zoom(4).save( "#{name}-male_gold@4x.png" )
68
+
69
+ punk_f = type.make( GOLD, gender: 'f' )
70
+ punk_f.save( "#{name}-female_gold.png" )
71
+ punk_f.zoom(4).save( "#{name}-female_gold@4x.png" )
72
+ end
73
+ ```
74
+
75
+ Voila!
76
+
77
+ ![](i/mummy-male_gold.png)
78
+ ![](i/alien-male_gold.png)
79
+ ![](i/ape-male_gold.png)
80
+ ![](i/skeleton-male_gold.png)
81
+ ![](i/zombie-male_gold.png)
82
+ ![](i/demon-male_gold.png)
83
+ ![](i/orc-male_gold.png)
84
+ ![](i/robot-male_gold.png)
85
+ ![](i/vampire-male_gold.png) <br>
86
+ ![](i/mummy-female_gold.png)
87
+ ![](i/alien-female_gold.png)
88
+ ![](i/ape-female_gold.png)
89
+ ![](i/skeleton-female_gold.png)
90
+ ![](i/zombie-female_gold.png)
91
+ ![](i/demon-female_gold.png)
92
+ ![](i/orc-female_gold.png)
93
+ ![](i/robot-female_gold.png)
94
+ ![](i/vampire-female_gold.png)
95
+
96
+ 4x
97
+
98
+ ![](i/mummy-male_gold@4x.png)
99
+ ![](i/alien-male_gold@4x.png)
100
+ ![](i/ape-male_gold@4x.png)
101
+ ![](i/skeleton-male_gold@4x.png)
102
+ ![](i/zombie-male_gold@4x.png)
103
+ ![](i/demon-male_gold@4x.png)
104
+ ![](i/orc-male_gold@4x.png)
105
+ ![](i/robot-male_gold@4x.png)
106
+ ![](i/vampire-male_gold@4x.png) <br>
59
107
  ![](i/mummy-female_gold@4x.png)
108
+ ![](i/alien-female_gold@4x.png)
109
+ ![](i/ape-female_gold@4x.png)
110
+ ![](i/skeleton-female_gold@4x.png)
111
+ ![](i/zombie-female_gold@4x.png)
112
+ ![](i/demon-female_gold@4x.png)
113
+ ![](i/orc-female_gold@4x.png)
114
+ ![](i/robot-female_gold@4x.png)
115
+ ![](i/vampire-female_gold@4x.png)
116
+
60
117
 
118
+ Let's try some more colors:
119
+
120
+ ```ruby
121
+ NEONGREEN = '#c3ff00'
122
+ DEEPPINK = '#ff1493'
123
+ DEEPPURPLE = '#aa4399'
124
+
125
+
126
+ colors = {
127
+ 'green' => NEONGREEN,
128
+ 'pink' => DEEPPINK,
129
+ 'purple' => DEEPPURPLE,
130
+ }
131
+
132
+ types = [Punk::Human]+types ## add human first
133
+
134
+ types.each do |type|
135
+ ## get last name e.g. Orc from Punk::Orc
136
+ name = type.name.split('::')[-1].downcase
137
+ colors.each do |color_name, color|
138
+ punk_m = type.make( color, gender: 'm' )
139
+ punk_m.save( "#{name}-male_#{color_name}.png" )
140
+ punk_m.zoom(4).save( "#{name}-male_#{color_name}@4x.png" )
141
+
142
+ punk_f = type.make( color, gender: 'f' )
143
+ punk_f.save( "#{name}-female_#{color_name}.png" )
144
+ punk_f.zoom(4).save( "#{name}-female_#{color_name}@4x.png" )
145
+ end
146
+ end
147
+ ```
148
+
149
+ Voila!
150
+
151
+ ![](i/human-male_green.png)
152
+ ![](i/mummy-male_green.png)
153
+ ![](i/alien-male_green.png)
154
+ ![](i/ape-male_green.png)
155
+ ![](i/skeleton-male_green.png)
156
+ ![](i/zombie-male_green.png)
157
+ ![](i/demon-male_green.png)
158
+ ![](i/orc-male_green.png)
159
+ ![](i/robot-male_green.png)
160
+ ![](i/vampire-male_green.png) <br>
161
+ ![](i/human-female_green.png)
162
+ ![](i/mummy-female_green.png)
163
+ ![](i/alien-female_green.png)
164
+ ![](i/ape-female_green.png)
165
+ ![](i/skeleton-female_green.png)
166
+ ![](i/zombie-female_green.png)
167
+ ![](i/demon-female_green.png)
168
+ ![](i/orc-female_green.png)
169
+ ![](i/robot-female_green.png)
170
+ ![](i/vampire-female_green.png) <br>
171
+ ![](i/human-male_pink.png)
172
+ ![](i/mummy-male_pink.png)
173
+ ![](i/alien-male_pink.png)
174
+ ![](i/ape-male_pink.png)
175
+ ![](i/skeleton-male_pink.png)
176
+ ![](i/zombie-male_pink.png)
177
+ ![](i/demon-male_pink.png)
178
+ ![](i/orc-male_pink.png)
179
+ ![](i/robot-male_pink.png)
180
+ ![](i/vampire-male_pink.png) <br>
181
+ ![](i/human-female_pink.png)
182
+ ![](i/mummy-female_pink.png)
183
+ ![](i/alien-female_pink.png)
184
+ ![](i/ape-female_pink.png)
185
+ ![](i/skeleton-female_pink.png)
186
+ ![](i/zombie-female_pink.png)
187
+ ![](i/demon-female_pink.png)
188
+ ![](i/orc-female_pink.png)
189
+ ![](i/robot-female_pink.png)
190
+ ![](i/vampire-female_pink.png) <br>
191
+ ![](i/human-male_purple.png)
192
+ ![](i/mummy-male_purple.png)
193
+ ![](i/alien-male_purple.png)
194
+ ![](i/ape-male_purple.png)
195
+ ![](i/skeleton-male_purple.png)
196
+ ![](i/zombie-male_purple.png)
197
+ ![](i/demon-male_purple.png)
198
+ ![](i/orc-male_purple.png)
199
+ ![](i/robot-male_purple.png)
200
+ ![](i/vampire-male_purple.png) <br>
201
+ ![](i/human-female_purple.png)
202
+ ![](i/mummy-female_purple.png)
203
+ ![](i/alien-female_purple.png)
204
+ ![](i/ape-female_purple.png)
205
+ ![](i/skeleton-female_purple.png)
206
+ ![](i/zombie-female_purple.png)
207
+ ![](i/demon-female_purple.png)
208
+ ![](i/orc-female_purple.png)
209
+ ![](i/robot-female_purple.png)
210
+ ![](i/vampire-female_purple.png)
211
+
212
+
213
+
214
+ 4x
215
+
216
+ ![](i/human-male_green@4x.png)
217
+ ![](i/mummy-male_green@4x.png)
218
+ ![](i/alien-male_green@4x.png)
219
+ ![](i/ape-male_green@4x.png)
220
+ ![](i/skeleton-male_green@4x.png)
221
+ ![](i/zombie-male_green@4x.png)
222
+ ![](i/demon-male_green@4x.png)
223
+ ![](i/orc-male_green@4x.png)
224
+ ![](i/robot-male_green@4x.png)
225
+ ![](i/vampire-male_green@4x.png) <br>
226
+ ![](i/human-female_green@4x.png)
227
+ ![](i/mummy-female_green@4x.png)
228
+ ![](i/alien-female_green@4x.png)
229
+ ![](i/ape-female_green@4x.png)
230
+ ![](i/skeleton-female_green@4x.png)
231
+ ![](i/zombie-female_green@4x.png)
232
+ ![](i/demon-female_green@4x.png)
233
+ ![](i/orc-female_green@4x.png)
234
+ ![](i/robot-female_green@4x.png)
235
+ ![](i/vampire-female_green@4x.png) <br>
236
+ ![](i/human-male_pink@4x.png)
237
+ ![](i/mummy-male_pink@4x.png)
238
+ ![](i/alien-male_pink@4x.png)
239
+ ![](i/ape-male_pink@4x.png)
240
+ ![](i/skeleton-male_pink@4x.png)
241
+ ![](i/zombie-male_pink@4x.png)
242
+ ![](i/demon-male_pink@4x.png)
243
+ ![](i/orc-male_pink@4x.png)
244
+ ![](i/robot-male_pink@4x.png)
245
+ ![](i/vampire-male_pink@4x.png) <br>
246
+ ![](i/human-female_pink@4x.png)
247
+ ![](i/mummy-female_pink@4x.png)
248
+ ![](i/alien-female_pink@4x.png)
249
+ ![](i/ape-female_pink@4x.png)
250
+ ![](i/skeleton-female_pink@4x.png)
251
+ ![](i/zombie-female_pink@4x.png)
252
+ ![](i/demon-female_pink@4x.png)
253
+ ![](i/orc-female_pink@4x.png)
254
+ ![](i/robot-female_pink@4x.png)
255
+ ![](i/vampire-female_pink@4x.png) <br>
256
+ ![](i/human-male_purple@4x.png)
257
+ ![](i/mummy-male_purple@4x.png)
258
+ ![](i/alien-male_purple@4x.png)
259
+ ![](i/ape-male_purple@4x.png)
260
+ ![](i/skeleton-male_purple@4x.png)
261
+ ![](i/zombie-male_purple@4x.png)
262
+ ![](i/demon-male_purple@4x.png)
263
+ ![](i/orc-male_purple@4x.png)
264
+ ![](i/robot-male_purple@4x.png)
265
+ ![](i/vampire-male_purple@4x.png) <br>
266
+ ![](i/human-female_purple@4x.png)
267
+ ![](i/mummy-female_purple@4x.png)
268
+ ![](i/alien-female_purple@4x.png)
269
+ ![](i/ape-female_purple@4x.png)
270
+ ![](i/skeleton-female_purple@4x.png)
271
+ ![](i/zombie-female_purple@4x.png)
272
+ ![](i/demon-female_purple@4x.png)
273
+ ![](i/orc-female_purple@4x.png)
274
+ ![](i/robot-female_purple@4x.png)
275
+ ![](i/vampire-female_purple@4x.png)
276
+
277
+
278
+
279
+ That's it.
61
280
 
62
281
 
63
282
 
@@ -69,6 +288,9 @@ Use it as you please with no restrictions whatsoever.
69
288
 
70
289
  ## Questions? Comments?
71
290
 
72
- Post them over at the [Help & Support](https://github.com/geraldb/help) page. Thanks.
291
+ Join us in the [Punk Art discord (chat server)](https://discord.gg/FE3HeXNKRa). Yes you can.
292
+ Your questions and commentary welcome.
293
+
294
+ Or post them over at the [Help & Support](https://github.com/geraldb/help) page. Thanks.
73
295
 
74
296
 
data/Rakefile CHANGED
@@ -4,9 +4,9 @@ require './lib/punkmaker/version.rb'
4
4
 
5
5
  ###
6
6
  # hack/ quick fix for broken intuit_values - overwrite with dummy
7
- class Hoe
8
- def intuit_values( input ); end
9
- end
7
+ # class Hoe
8
+ # def intuit_values( input ); end
9
+ # end
10
10
 
11
11
 
12
12
  Hoe.spec 'punkmaker' do
@@ -16,7 +16,7 @@ Hoe.spec 'punkmaker' do
16
16
  self.summary = 'punkmaker gem - make your own (pixel) punk base (archetype) heads incl. humans, zombies, apes, aliens, mummies, robots, and much more'
17
17
  self.description = summary
18
18
 
19
- self.urls = { home: 'https://github.com/cryptopunksnotdead/cryptopunks' }
19
+ self.urls = { home: 'https://github.com/cryptopunksnotdead/punkart.sandbox' }
20
20
 
21
21
  self.author = 'Gerald Bauer'
22
22
  self.email = 'gerald.bauer@gmail.com'
@@ -27,6 +27,7 @@ Hoe.spec 'punkmaker' do
27
27
 
28
28
  self.extra_deps = [
29
29
  ['pixelart'],
30
+ ['spritesheet'],
30
31
  ]
31
32
 
32
33
  self.licenses = ['Public Domain']
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,71 @@
1
+
2
+
3
+ module Punk
4
+
5
+ module Alien ## make it a class - why? why not?
6
+
7
+ BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/alien-male.png" )
8
+ BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/alien-female.png" )
9
+
10
+
11
+ def self.make( color,
12
+ gender: 'm' )
13
+ color_map = derive_color_map( color )
14
+
15
+ punk = nil
16
+ if gender == 'm'
17
+ punk = BASE_M.change_colors( color_map )
18
+ else
19
+ punk = BASE_F.change_colors( color_map )
20
+ end
21
+ punk
22
+ end
23
+
24
+
25
+ def self.derive_color_map( color )
26
+
27
+ # 2 pixels #f1ffff / rgb(241 255 255) - hsl(180° 100% 97%) - lighter
28
+ # 125 pixels #c8fbfb / rgb(200 251 251) - hsl(180° 86% 88%) - base (use as base)
29
+ # 6 pixels #9be0e0 / rgb(155 224 224) - hsl(180° 53% 74%) - darker
30
+ # 2 pixels #75bdbd / rgb(117 189 189) - hsl(180° 35% 60%) - darkest
31
+ color = Color.parse( color ) if color.is_a?( String )
32
+ base = color
33
+
34
+ hsl = Color.to_hsl( color )
35
+ pp hsl
36
+
37
+ h, s, l = hsl
38
+ h = h % 360 # make always positive (might be -50 or such)
39
+ pp [h,s,l]
40
+
41
+ ## todo/check - check "formula" used in skintones script for humans!!!
42
+ lighter = Color.from_hsl(
43
+ (h+1)%360, # todo/check: make lighter by -1 on hue? or +1????
44
+ [1.0,s+0.10].min,
45
+ [1.0,l+0.25].min)
46
+
47
+
48
+ darker = Color.from_hsl(
49
+ h,
50
+ [0.0,s-0.05].max,
51
+ [0.0,l-0.10].max)
52
+
53
+ darkest = Color.from_hsl(
54
+ h,
55
+ [0.0,s-0.10].max,
56
+ [0.0,l-0.20].max)
57
+
58
+
59
+ color_map = {
60
+ '#c8fbfb' => base,
61
+ '#f1ffff' => lighter,
62
+ '#9be0e0' => darker,
63
+ '#75bdbd' => darkest,
64
+ }
65
+
66
+ color_map
67
+ end
68
+
69
+ end # module Alien
70
+ end # module Punk
71
+
@@ -0,0 +1,60 @@
1
+ module Punk
2
+
3
+
4
+ module Ape ## make it a class - why? why not?
5
+
6
+ BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/ape-male.png" )
7
+ BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/ape-female.png" )
8
+
9
+ def self.make( color,
10
+ gender: 'm' )
11
+ color_map = derive_color_map( color )
12
+
13
+ punk = nil
14
+ if gender == 'm'
15
+ punk = BASE_M.change_colors( color_map )
16
+ else
17
+ punk = BASE_F.change_colors( color_map )
18
+ end
19
+ punk
20
+ end
21
+
22
+ def self.derive_color_map( color )
23
+ color = Color.parse( color ) if color.is_a?( String )
24
+
25
+ darkest = color
26
+
27
+ hsl = Color.to_hsl( color )
28
+ pp hsl
29
+
30
+ h, s, l = hsl
31
+ h = h % 360 # make always positive (might be -50 or such)
32
+ pp [h,s,l]
33
+
34
+ darker = Color.from_hsl(
35
+ h,
36
+ s,
37
+ [1.0,l+0.05].min)
38
+
39
+ light = Color.from_hsl(
40
+ (h+1)%360,
41
+ [1.0,s+0.10].min,
42
+ [1.0,l+0.20].min)
43
+
44
+ lighter = Color.from_hsl(
45
+ (h+1)%360,
46
+ [1.0,s+0.20].min,
47
+ [1.0,l+0.35].min)
48
+
49
+ color_map = {
50
+ '#352410' => darkest, # darkest - 56 pixels (base!!)
51
+ '#6a563f' => darker, # darker - 4 pixels
52
+ '#856f56' => light, # light - 63 pixels
53
+ '#a98c6b' => lighter # lighter
54
+ }
55
+
56
+ color_map
57
+ end
58
+ end # module Ape
59
+ end # module Punk
60
+
@@ -0,0 +1,61 @@
1
+ module Punk
2
+
3
+
4
+ module Demon ## make it a class - why? why not?
5
+
6
+ BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/demon-male.png" )
7
+ BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/demon-female.png" )
8
+
9
+ def self.make( color,
10
+ gender: 'm' )
11
+ color_map = derive_color_map( color )
12
+
13
+ punk = nil
14
+ if gender == 'm'
15
+ punk = BASE_M.change_colors( color_map )
16
+ else
17
+ punk = BASE_F.change_colors( color_map )
18
+ end
19
+ punk
20
+ end
21
+
22
+ def self.derive_color_map( color )
23
+ color = Color.parse( color ) if color.is_a?( String )
24
+
25
+ # 134 pixels #850008 / rgb(133 0 8) - hsl(356° 100% 26%) - base
26
+ # 2 pixels #630006 / rgb( 99 0 6) - hsl(356° 100% 19%) - darker
27
+ # 4 pixels #390102 / rgb( 57 1 2) - hsl(359° 97% 11%) - darkest
28
+ #
29
+ # 373 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - α( 0%) - TRANSPARENT
30
+ # 63 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - BLACK
31
+
32
+ base = color
33
+
34
+ hsl = Color.to_hsl( color )
35
+ pp hsl
36
+
37
+ h, s, l = hsl
38
+ h = h % 360 # make always positive (might be -50 or such)
39
+ pp [h,s,l]
40
+
41
+ darker = Color.from_hsl(
42
+ h,
43
+ s,
44
+ [0.0,l-0.08].max)
45
+
46
+ darkest = Color.from_hsl(
47
+ (h+2)%360,
48
+ [0.0,s-0.05].max,
49
+ [0.0,l-0.15].max)
50
+
51
+
52
+ color_map = {
53
+ '#850008' => base,
54
+ '#630006' => darker,
55
+ '#390102' => darkest,
56
+ }
57
+
58
+ color_map
59
+ end
60
+ end # module Demon
61
+ end # module Punk
@@ -0,0 +1,121 @@
1
+
2
+
3
+ module Punk
4
+ module Hair
5
+ def self.colors
6
+ @colors ||= begin
7
+ {
8
+ 'black' => '000000',
9
+
10
+ 'brown' => '51360c', # (darker) brown
11
+ 'brunette' => 'a66e2c', # lighter brown
12
+
13
+ 'orange' => 'e65700',
14
+ 'red' => 'e22626',
15
+ 'pink' => 'ff8ebe',
16
+ 'purple' => '710cc7',
17
+
18
+ 'green' => '28b143',
19
+
20
+ 'blonde' => 'fff68e',
21
+ 'silver' => 'e0e0e0',
22
+ 'white' => 'FFFFFF',
23
+ }.reduce( {} ) do |h, (name, color_hex)|
24
+ h[ name ] = Color.from_hex( color_hex )
25
+ h
26
+ end
27
+ end
28
+ @colors
29
+ end
30
+
31
+ def self.derive_color_map( color )
32
+ color = Color.parse( color ) if color.is_a?( String )
33
+
34
+ h,s,v = Color.to_hsv( color, include_alpha: false )
35
+ h = h % 360 ## make sure h(ue) is always positive!!!
36
+ puts " #{[h,s,v].inspect}"
37
+
38
+ # lighter - #2a2aff / rgb( 42 42 255) - hsl(240° 100% 58%) - hsv(240° 84% 100%)
39
+ # - used in hair( frumpy, f/pigtails3, f/straight3, f/wild4, f/wild5 )
40
+
41
+ # lightest - #5454ff / rgb( 84 84 255) - hsl(240° 100% 66%) - hsv(240° 67% 100%)
42
+ # - used in hair(mohawk thin)
43
+
44
+ # darker - #0000dd / rgb( 0 0 221) - hsl(240° 100% 43%) - hsv(240° 100% 87%)
45
+ # - used in hair(mohawk)
46
+
47
+ ## todo/fix: make lighter/darker formula more "robust"/ better!!!
48
+ if color == 0x000000ff # black
49
+ # hsv( 0° 0% 0%)
50
+ lighter = Color.from_hsv( h, 0.0, 0.16 )
51
+ lightest = Color.from_hsv( h, 0.0, 0.33 )
52
+ darker = Color.from_hsv( h, 0.0, 0.0 ) ## darker than black not possible ;-)
53
+ elsif color == 0xe0e0e0ff # silver
54
+ # hsv( 0° 0% 88%)
55
+ lighter = Color.from_hsv( h, 0.0, 1.0 ) # white
56
+ lightest = Color.from_hsv( h, 0.0, 1.0 ) # white
57
+ darker = Color.from_hsv( h, 0.0, [0.0, v-0.13].max )
58
+ elsif color == 0xffffffff # white
59
+ # hsv( 0° 0% 100%)
60
+ lighter = Color.from_hsv( h, 0.0, [0.0, v-0.11].max ) # note: make darker
61
+ lightest = Color.from_hsv( h, 0.0, 1.0 )
62
+ darker = Color.from_hsv( h, 0.0, [0.0, v-0.16].max )
63
+ else
64
+ lighter = Color.from_hsv( h, [0.0, s-0.16].max, v )
65
+ lightest = Color.from_hsv( h, [0.0, s-0.33].max, v )
66
+ darker = Color.from_hsv( h, s, [0.0, v-0.13].max )
67
+ end
68
+
69
+ color_map = {
70
+ '0000ffff' => color,
71
+ '2a2affff' => lighter,
72
+ '5454ffff' => lightest,
73
+ '0000ddff' => darker,
74
+ }
75
+ color_map
76
+ end # method self.derive_color_map
77
+
78
+ def self.colorize( hair, color: )
79
+ # "low-level" with no validity checks on hair image and passed in color (integer)
80
+ color_map = derive_color_map( color )
81
+ hair.change_colors( color_map )
82
+ end
83
+
84
+
85
+ class Maker ## rename to Factory or Studio or Generator or .. such - why? why not?
86
+ def self.read( image_path, meta_path, width:, height:, colors: )
87
+ sheet = Pixelart::Spritesheet.read( image_path, meta_path,
88
+ width: width,
89
+ height: height )
90
+ new( sheet, colors: colors )
91
+ end
92
+
93
+ attr_reader :sheet, :colors
94
+
95
+ def initialize( sheet, colors: )
96
+ @sheet = sheet
97
+ @colors = colors
98
+ end
99
+ def find_by( name: ) @sheet.find_by( name: name ); end
100
+
101
+ def make( style, color: 'black' ) ## change name to colorize - why? why not?
102
+ ## pass-through shavedhead (no colors - alpha only) - why? why not?
103
+ hair = @sheet.find_by( name: style )
104
+ if hair.nil?
105
+ puts "!! ERROR - unknow hair style >#{style}<; sorry"
106
+ exit 1
107
+ end
108
+
109
+ color_key = color.downcase.gsub(' ','')
110
+ rgba = @colors[ color_key ]
111
+ if rgba.nil?
112
+ puts "!! ERROR - unknow hair color >#{style}<; sorry"
113
+ exit 1
114
+ end
115
+
116
+ color_map = Hair.derive_color_map( rgba )
117
+ hair.change_colors( color_map )
118
+ end
119
+ end ## (embedded) class Maker
120
+ end # module Hair
121
+ end # module Punk
@@ -40,6 +40,13 @@ module Human ## make it a class - why? why not?
40
40
  end
41
41
 
42
42
 
43
+ ##
44
+ ## todo/check:
45
+ ## add a derive_colors or dervice_skintones method - why? why not?
46
+ ## - change to name skintone_palette - why? why not?
47
+ ## def self.derive_skintone_colors( color or base ) ???
48
+
49
+
43
50
  def self.derive_color_map( color )
44
51
  color = Color.parse( color ) if color.is_a?( String )
45
52
 
@@ -0,0 +1,62 @@
1
+ module Punk
2
+
3
+
4
+ module Orc ## make it a class - why? why not?
5
+
6
+ BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/orc-male.png" )
7
+ BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/orc-female.png" )
8
+
9
+ def self.make( color,
10
+ gender: 'm' )
11
+ color_map = derive_color_map( color )
12
+
13
+ punk = nil
14
+ if gender == 'm'
15
+ punk = BASE_M.change_colors( color_map )
16
+ else
17
+ punk = BASE_F.change_colors( color_map )
18
+ end
19
+ punk
20
+ end
21
+
22
+ def self.derive_color_map( color )
23
+ color = Color.parse( color ) if color.is_a?( String )
24
+
25
+ # 380 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - α( 0%) - TRANSPARENT
26
+ # 63 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - BLACK
27
+ # 120 pixels #50650e / rgb( 80 101 14) - hsl( 74° 76% 23%) - hsv( 74° 86% 40%)
28
+ # 7 pixels #171a08 / rgb( 23 26 8) - hsl( 70° 53% 7%) - hsv( 70° 69% 10%)
29
+ # 6 pixels #ffffff / rgb(255 255 255) - hsl( 0° 0% 100%) - hsv( 0° 0% 100%) - WHITE
30
+ # ---
31
+ # 423 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - α( 0%) - TRANSPARENT
32
+ # 55 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - BLACK
33
+ # 87 pixels #50650e / rgb( 80 101 14) - hsl( 74° 76% 23%) - hsv( 74° 86% 40%)
34
+ # 7 pixels #171a08 / rgb( 23 26 8) - hsl( 70° 53% 7%) - hsv( 70° 69% 10%)
35
+ # 4 pixels #ffffff / rgb(255 255 255) - hsl( 0° 0% 100%) - hsv( 0° 0% 100%) - WHITE
36
+ base = color
37
+
38
+ hsl = Color.to_hsl( color )
39
+ pp hsl
40
+
41
+ h, s, l = hsl
42
+ h = h % 360 # make always positive (might be -50 or such)
43
+ pp [h,s,l]
44
+
45
+
46
+ darker = Color.from_hsl(
47
+ h,
48
+ s,
49
+ [0.0,l-0.16].max)
50
+
51
+
52
+
53
+ color_map = {
54
+ '#50650e' => base,
55
+ '#171a08' => darker,
56
+ }
57
+
58
+ color_map
59
+ end
60
+ end # module Orc
61
+ end # module Punk
62
+
@@ -0,0 +1,63 @@
1
+ module Punk
2
+
3
+
4
+ module Robot ## make it a class - why? why not?
5
+
6
+ BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/robot-male.png" )
7
+ BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/robot-female.png" )
8
+
9
+ def self.make( color,
10
+ gender: 'm' )
11
+ color_map = derive_color_map( color )
12
+
13
+ punk = nil
14
+ if gender == 'm'
15
+ punk = BASE_M.change_colors( color_map )
16
+ else
17
+ punk = BASE_F.change_colors( color_map )
18
+ end
19
+ punk
20
+ end
21
+
22
+ def self.derive_color_map( color )
23
+ color = Color.parse( color ) if color.is_a?( String )
24
+
25
+ # 384 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - α( 0%) - TRANSPARENT
26
+ # 74 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - BLACK
27
+ # 100 pixels #a4a4a4 / rgb(164 164 164) - hsl( 0° 0% 64%) - hsv( 0° 0% 64%) - 8-BIT GRAYSCALE #164
28
+ # 16 pixels #535353 / rgb( 83 83 83) - hsl( 0° 0% 33%) - hsv( 0° 0% 33%) - 8-BIT GRAYSCALE #83
29
+ # 2 pixels #a9f7ff / rgb(169 247 255) - hsl(186° 100% 83%) - hsv(186° 34% 100%)
30
+ # ---
31
+ # 427 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - α( 0%) - TRANSPARENT
32
+ # 65 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - BLACK
33
+ # 67 pixels #a4a4a4 / rgb(164 164 164) - hsl( 0° 0% 64%) - hsv( 0° 0% 64%) - 8-BIT GRAYSCALE #164
34
+ # 15 pixels #535353 / rgb( 83 83 83) - hsl( 0° 0% 33%) - hsv( 0° 0% 33%) - 8-BIT GRAYSCALE #83
35
+ # 2 pixels #a9f7ff / rgb(169 247 255) - hsl(186° 100% 83%) - hsv(186° 34% 100%)
36
+
37
+ base = color
38
+
39
+ hsl = Color.to_hsl( color )
40
+ pp hsl
41
+
42
+ h, s, l = hsl
43
+ h = h % 360 # make always positive (might be -50 or such)
44
+ pp [h,s,l]
45
+
46
+
47
+ darker = Color.from_hsl(
48
+ h,
49
+ s,
50
+ [0.0,l-0.20].max)
51
+
52
+ color_map = {
53
+ '#a4a4a4' => base,
54
+ '#535353' => darker,
55
+ }
56
+
57
+ color_map
58
+ end
59
+ end # module Robot
60
+ end # module Punk
61
+
62
+
63
+
@@ -0,0 +1,39 @@
1
+ module Punk
2
+
3
+ module Skeleton ## make it a class - why? why not?
4
+
5
+ BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/skeleton-male.png" )
6
+ BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/skeleton-female.png" )
7
+
8
+ def self.make( color,
9
+ gender: 'm' )
10
+ color_map = derive_color_map( color )
11
+
12
+ punk = nil
13
+ if gender == 'm'
14
+ punk = BASE_M.change_colors( color_map )
15
+ else
16
+ punk = BASE_F.change_colors( color_map )
17
+ end
18
+ punk
19
+ end
20
+
21
+ def self.derive_color_map( color )
22
+ color = Color.parse( color ) if color.is_a?( String )
23
+
24
+ # 122 pixels #e0e0e0 / rgb(224 224 224) - hsl( 0° 0% 88%) - 8-BIT GRAYSCALE #224
25
+
26
+ # 385 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - α( 0%) - TRANSPARENT
27
+ # 69 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - BLACK
28
+
29
+ base = color
30
+
31
+ color_map = {
32
+ '#e0e0e0' => base,
33
+ }
34
+
35
+ color_map
36
+ end
37
+ end # module Skeleton
38
+ end # module Punk
39
+
@@ -0,0 +1,71 @@
1
+ module Punk
2
+
3
+
4
+ module Vampire ## make it a class - why? why not?
5
+
6
+ BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/vampire-male.png" )
7
+ BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/vampire-female.png" )
8
+
9
+ def self.make( color,
10
+ gender: 'm' )
11
+ color_map = derive_color_map( color )
12
+
13
+ punk = nil
14
+ if gender == 'm'
15
+ punk = BASE_M.change_colors( color_map )
16
+ else
17
+ punk = BASE_F.change_colors( color_map )
18
+ end
19
+ punk
20
+ end
21
+
22
+ def self.derive_color_map( color )
23
+ color = Color.parse( color ) if color.is_a?( String )
24
+
25
+ # 366 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - α( 0%) - TRANSPARENT
26
+ # 67 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - BLACK
27
+ # 126 pixels #e0e0e0 / rgb(224 224 224) - hsl( 0° 0% 88%) - hsv( 0° 0% 88%) - 8-BIT GRAYSCALE #224
28
+ # 4 pixels #535353 / rgb( 83 83 83) - hsl( 0° 0% 33%) - hsv( 0° 0% 33%) - 8-BIT GRAYSCALE #83
29
+ # 2 pixels #ffffff / rgb(255 255 255) - hsl( 0° 0% 100%) - hsv( 0° 0% 100%) - WHITE
30
+ # 2 pixels #f6000b / rgb(246 0 11) - hsl(357° 100% 48%) - hsv(357° 100% 96%)
31
+ # 9 pixels #131313 / rgb( 19 19 19) - hsl( 0° 0% 7%) - hsv( 0° 0% 7%) - 8-BIT GRAYSCALE #19
32
+ # ---
33
+ # 403 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - α( 0%) - TRANSPARENT
34
+ # 62 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - BLACK
35
+ # 92 pixels #e0e0e0 / rgb(224 224 224) - hsl( 0° 0% 88%) - hsv( 0° 0% 88%) - 8-BIT GRAYSCALE #224
36
+ # 4 pixels #535353 / rgb( 83 83 83) - hsl( 0° 0% 33%) - hsv( 0° 0% 33%) - 8-BIT GRAYSCALE #83
37
+ # 2 pixels #ffffff / rgb(255 255 255) - hsl( 0° 0% 100%) - hsv( 0° 0% 100%) - WHITE
38
+ # 2 pixels #f6000b / rgb(246 0 11) - hsl(357° 100% 48%) - hsv(357° 100% 96%)
39
+ # 11 pixels #131313 / rgb( 19 19 19) - hsl( 0° 0% 7%) - hsv( 0° 0% 7%) - 8-BIT GRAYSCALE #19
40
+ base = color
41
+
42
+ hsl = Color.to_hsl( color )
43
+ pp hsl
44
+
45
+ h, s, l = hsl
46
+ h = h % 360 # make always positive (might be -50 or such)
47
+ pp [h,s,l]
48
+
49
+
50
+ darker = Color.from_hsl(
51
+ h,
52
+ s,
53
+ [0.0,l-0.20].max)
54
+
55
+
56
+ darkest = Color.from_hsl(
57
+ h,
58
+ s,
59
+ [0.0,l-0.35].max)
60
+
61
+ color_map = {
62
+ '#e0e0e0' => base,
63
+ '#535353' => darker,
64
+ '#131313' => darkest,
65
+ }
66
+
67
+ color_map
68
+ end
69
+ end # module Vampire
70
+ end # module Punk
71
+
@@ -2,7 +2,7 @@ module Pixelart
2
2
  module Module
3
3
  module Punkmaker
4
4
  MAJOR = 0
5
- MINOR = 1
5
+ MINOR = 3
6
6
  PATCH = 0
7
7
  VERSION = [MAJOR,MINOR,PATCH].join('.')
8
8
 
@@ -0,0 +1,61 @@
1
+ module Punk
2
+
3
+
4
+ module Zombie ## make it a class - why? why not?
5
+
6
+ BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/zombie-male.png" )
7
+ BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/zombie-female.png" )
8
+
9
+ def self.make( color,
10
+ gender: 'm' )
11
+ color_map = derive_color_map( color )
12
+
13
+ punk = nil
14
+ if gender == 'm'
15
+ punk = BASE_M.change_colors( color_map )
16
+ else
17
+ punk = BASE_F.change_colors( color_map )
18
+ end
19
+ punk
20
+ end
21
+
22
+ def self.derive_color_map( color )
23
+ color = Color.parse( color ) if color.is_a?( String )
24
+
25
+ # 2 pixels #9bbc88 / rgb(155 188 136) - hsl( 98° 28% 64%) - lighter
26
+ # 125 pixels #7da269 / rgb(125 162 105) - hsl( 99° 23% 52%) - base (use as base)
27
+ # 7 pixels #5e7253 / rgb( 94 114 83) - hsl( 99° 16% 39%) - darker
28
+
29
+ base = color
30
+
31
+ hsl = Color.to_hsl( color )
32
+ pp hsl
33
+
34
+ h, s, l = hsl
35
+ h = h % 360 # make always positive (might be -50 or such)
36
+ pp [h,s,l]
37
+
38
+ darker = Color.from_hsl(
39
+ h,
40
+ [0.0,s-0.05].max,
41
+ [0.0,l-0.12].max)
42
+
43
+ ## todo/check - check "formula" used in skintones script for humans!!!
44
+ lighter = Color.from_hsl(
45
+ (h+1)%360, # todo/check: make lighter by -1 on hue? or +1????
46
+ [1.0,s+0.10].min,
47
+ [1.0,l+0.25].min)
48
+
49
+
50
+ color_map = {
51
+ '#7da269' => base,
52
+ '#5e7253' => darker,
53
+ '#9bbc88' => lighter
54
+ }
55
+
56
+ color_map
57
+ end
58
+ end # module Zombie
59
+ end # module Punk
60
+
61
+
data/lib/punkmaker.rb CHANGED
@@ -1,10 +1,24 @@
1
1
  require 'pixelart'
2
+ require 'spritesheet'
2
3
 
3
4
 
4
- require_relative 'punkmaker/version'
5
+ require_relative 'punkmaker/version' ## let version always go first
6
+
7
+ ## more base / archetypes
5
8
  require_relative 'punkmaker/human'
9
+ require_relative 'punkmaker/alien'
6
10
  require_relative 'punkmaker/mummy'
11
+ require_relative 'punkmaker/ape'
12
+ require_relative 'punkmaker/skeleton'
13
+ require_relative 'punkmaker/zombie'
14
+ require_relative 'punkmaker/demon'
15
+ require_relative 'punkmaker/orc'
16
+ require_relative 'punkmaker/robot'
17
+ require_relative 'punkmaker/vampire'
18
+
7
19
 
20
+ ## more hair (incl. beards & eyebrows)
21
+ require_relative 'punkmaker/hair'
8
22
 
9
23
 
10
24
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: punkmaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-21 00:00:00.000000000 Z
11
+ date: 2023-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pixelart
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: spritesheet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rdoc
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -50,14 +64,14 @@ dependencies:
50
64
  requirements:
51
65
  - - "~>"
52
66
  - !ruby/object:Gem::Version
53
- version: '3.23'
67
+ version: '4.0'
54
68
  type: :development
55
69
  prerelease: false
56
70
  version_requirements: !ruby/object:Gem::Requirement
57
71
  requirements:
58
72
  - - "~>"
59
73
  - !ruby/object:Gem::Version
60
- version: '3.23'
74
+ version: '4.0'
61
75
  description: punkmaker gem - make your own (pixel) punk base (archetype) heads incl.
62
76
  humans, zombies, apes, aliens, mummies, robots, and much more
63
77
  email: gerald.bauer@gmail.com
@@ -72,15 +86,40 @@ files:
72
86
  - Manifest.txt
73
87
  - README.md
74
88
  - Rakefile
89
+ - config/alien-female.png
90
+ - config/alien-male.png
91
+ - config/ape-female.png
92
+ - config/ape-male.png
93
+ - config/demon-female.png
94
+ - config/demon-male.png
75
95
  - config/human-female4.png
76
96
  - config/human-male4.png
77
97
  - config/mummy-female.png
78
98
  - config/mummy-male.png
99
+ - config/orc-female.png
100
+ - config/orc-male.png
101
+ - config/robot-female.png
102
+ - config/robot-male.png
103
+ - config/skeleton-female.png
104
+ - config/skeleton-male.png
105
+ - config/vampire-female.png
106
+ - config/vampire-male.png
107
+ - config/zombie-female.png
108
+ - config/zombie-male.png
79
109
  - lib/punkmaker.rb
110
+ - lib/punkmaker/alien.rb
111
+ - lib/punkmaker/ape.rb
112
+ - lib/punkmaker/demon.rb
113
+ - lib/punkmaker/hair.rb
80
114
  - lib/punkmaker/human.rb
81
115
  - lib/punkmaker/mummy.rb
116
+ - lib/punkmaker/orc.rb
117
+ - lib/punkmaker/robot.rb
118
+ - lib/punkmaker/skeleton.rb
119
+ - lib/punkmaker/vampire.rb
82
120
  - lib/punkmaker/version.rb
83
- homepage: https://github.com/cryptopunksnotdead/cryptopunks
121
+ - lib/punkmaker/zombie.rb
122
+ homepage: https://github.com/cryptopunksnotdead/punkart.sandbox
84
123
  licenses:
85
124
  - Public Domain
86
125
  metadata: {}
@@ -101,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
140
  - !ruby/object:Gem::Version
102
141
  version: '0'
103
142
  requirements: []
104
- rubygems_version: 3.3.7
143
+ rubygems_version: 3.4.10
105
144
  signing_key:
106
145
  specification_version: 4
107
146
  summary: punkmaker gem - make your own (pixel) punk base (archetype) heads incl. humans,