kittyverse 0.3.0 → 0.4.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.
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
  ## note: totesbasic has three traits / genes
8
- TOTESBASIC = ['totesbasic 1', 'totesbasic 2', 'totesbasic 3'] ## was: ['PA14', 'PA15', 'PA23']
8
+ TOTESBASIC = ['Totesbasic 1', 'Totesbasic 2', 'Totesbasic 3'] ## was: ['PA14', 'PA15', 'PA23']
9
9
  ANY_TOTESBASIC = ALL_TOTESBASIC = TOTESBASIC
10
10
 
11
11
 
@@ -0,0 +1,377 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # trais / kaittributes
5
+ # see https://cryptokittydex.com/kaittributes
6
+ # https://docs.google.com/spreadsheets/d/1ShiBKSglFAB2vJe4Uow3iF09FBVq6ZAaOzTCIECf4iA
7
+ # http://www.rolldice.club/cryptokitties/wkt_tree.php
8
+ # https://www.cryptokitties.co/cattributes (official cattributes list)
9
+ #
10
+ #
11
+ # for latest updates on new cattributes see:
12
+ # https://updates.cryptokitties.co (official latest updates/timeline)
13
+
14
+ ## ordered by gene position (0,1,3.4,5,... etc.)
15
+ ## 12 traits (4 genes each)
16
+ TRAITS =
17
+ {
18
+ body: {
19
+ genes: '0-3',
20
+ name: 'Fur', code: 'FU',
21
+ kai: {
22
+ '1' => 'Savannah',
23
+ '2' => 'Selkirk',
24
+ '3' => 'Chantilly',
25
+ '4' => 'Birman',
26
+ '5' => 'Koladiviya',
27
+ '6' => 'Bobtail',
28
+ '7' => 'Manul',
29
+ '8' => 'Pixiebob',
30
+ '9' => 'Siberian',
31
+ 'a' => 'Cymric',
32
+ 'b' => 'Chartreux',
33
+ 'c' => 'Himalayan',
34
+ 'd' => 'Munchkin',
35
+ 'e' => 'Sphynx',
36
+ 'f' => 'Ragamuffin',
37
+ 'g' => 'Ragdoll',
38
+ 'h' => 'Norwegianforest',
39
+ 'i' => 'Mekong',
40
+ 'j' => 'Highlander',
41
+ 'k' => 'Balinese',
42
+ 'm' => 'Lynx',
43
+ 'n' => 'Mainecoon',
44
+ 'o' => 'Laperm',
45
+ 'p' => 'Persian',
46
+ 'q' => 'Fox',
47
+ 'r' => 'Kurilian',
48
+ 's' => 'Toyger',
49
+ 't' => 'Manx',
50
+ 'u' => 'Lykoi',
51
+ 'v' => 'Burmilla',
52
+ 'w' => 'Liger',
53
+ 'x' => ''
54
+ }
55
+ },
56
+ pattern: {
57
+ genes: '4-7',
58
+ name: 'Pattern', code: 'PA',
59
+ kai: {
60
+ '1' => 'Vigilante',
61
+ '2' => 'Tiger',
62
+ '3' => 'Rascal',
63
+ '4' => 'Ganado',
64
+ '5' => 'Leopard',
65
+ '6' => 'Camo',
66
+ '7' => 'Rorschach',
67
+ '8' => 'Spangled',
68
+ '9' => 'Calicool',
69
+ 'a' => 'Luckystripe',
70
+ 'b' => 'Amur',
71
+ 'c' => 'Jaguar',
72
+ 'd' => 'Spock',
73
+ 'e' => 'Mittens',
74
+ 'f' => 'Totesbasic 1', ## use totesbasic_f or totesbasic (14) - why? why not?
75
+ 'g' => 'Totesbasic 2', ## use totesbasic_g or totesbasic (15)
76
+ 'h' => 'Splat',
77
+ 'i' => 'Thunderstruck',
78
+ 'j' => 'Dippedcone',
79
+ 'k' => 'Highsociety',
80
+ 'm' => 'Tigerpunk',
81
+ 'n' => 'Henna',
82
+ 'o' => 'Arcreactor',
83
+ 'p' => 'Totesbasic 3', ## use totesbasic_p or totesbasic (23) - why? why not?
84
+ 'q' => 'Scorpius',
85
+ 'r' => 'Razzledazzle',
86
+ 's' => 'Hotrod',
87
+ 't' => 'Allyouneed',
88
+ 'u' => 'Avatar',
89
+ 'v' => 'Gyre',
90
+ 'w' => 'Moonrise',
91
+ 'x' => ''
92
+ }
93
+ },
94
+ coloreyes: {
95
+ genes: '8-11',
96
+ name: 'Eye Color', code: 'EC',
97
+ kai: {
98
+ '1' => 'Hundergrey',
99
+ '2' => 'Gold',
100
+ '3' => 'Topaz',
101
+ '4' => 'Mintgreen',
102
+ '5' => 'Isotope',
103
+ '6' => 'Sizzurp',
104
+ '7' => 'Chestnut',
105
+ '8' => 'Strawberry',
106
+ '9' => 'Sapphire',
107
+ 'a' => 'Forgetmenot',
108
+ 'b' => 'Dahlia',
109
+ 'c' => 'Coralsunrise',
110
+ 'd' => 'Olive',
111
+ 'e' => 'Doridnudibranch',
112
+ 'f' => 'Parakeet',
113
+ 'g' => 'Cyan',
114
+ 'h' => 'Pumpkin',
115
+ 'i' => 'Limegreen',
116
+ 'j' => 'Bridesmaid',
117
+ 'k' => 'Bubblegum',
118
+ 'm' => 'Twilightsparkle',
119
+ 'n' => 'Palejade',
120
+ 'o' => 'Pinefresh',
121
+ 'p' => 'Eclipse',
122
+ 'q' => 'Babypuke',
123
+ 'r' => 'Downbythebay',
124
+ 's' => 'Autumnmoon',
125
+ 't' => 'Oasis',
126
+ 'u' => 'Gemini',
127
+ 'v' => 'Dioscuri',
128
+ 'w' => 'Kaleidoscope',
129
+ 'x' => ''
130
+ }
131
+ },
132
+ eyes: {
133
+ genes: '12-15',
134
+ name: 'Eye Shape', code: 'ES', ## eye type
135
+ kai: {
136
+ '1' => 'Swarley',
137
+ '2' => 'Wonky',
138
+ '3' => 'Serpent',
139
+ '4' => 'Googly',
140
+ '5' => 'Otaku',
141
+ '6' => 'Simple',
142
+ '7' => 'Crazy',
143
+ '8' => 'Thicccbrowz',
144
+ '9' => 'Caffeine',
145
+ 'a' => 'Wowza',
146
+ 'b' => 'Baddate',
147
+ 'c' => 'Asif',
148
+ 'd' => 'Chronic',
149
+ 'e' => 'Slyboots',
150
+ 'f' => 'Wiley',
151
+ 'g' => 'Stunned',
152
+ 'h' => 'Chameleon',
153
+ 'i' => 'Alien',
154
+ 'j' => 'Fabulous',
155
+ 'k' => 'Raisedbrow',
156
+ 'm' => 'Tendertears',
157
+ 'n' => 'Hacker',
158
+ 'o' => 'Sass',
159
+ 'p' => 'Sweetmeloncakes',
160
+ 'q' => 'Oceanid',
161
+ 'r' => 'Wingtips',
162
+ 's' => 'Firedup',
163
+ 't' => 'Buzzed',
164
+ 'u' => 'Bornwithit',
165
+ 'v' => 'Candyshoppe',
166
+ 'w' => 'Drama',
167
+ 'x' => ''
168
+ }
169
+ },
170
+ colorprimary: {
171
+ genes: '16-19',
172
+ name: 'Base Color', code: 'BC', ## color1 / colorprimary / body color
173
+ kai: {
174
+ '1' => 'Shadowgrey',
175
+ '2' => 'Salmon',
176
+ '3' => 'Meowgarine',
177
+ '4' => 'Orangesoda',
178
+ '5' => 'Cottoncandy',
179
+ '6' => 'Mauveover',
180
+ '7' => 'Aquamarine',
181
+ '8' => 'Nachocheez',
182
+ '9' => 'Harbourfog',
183
+ 'a' => 'Cinderella',
184
+ 'b' => 'Greymatter',
185
+ 'c' => 'Tundra',
186
+ 'd' => 'Brownies',
187
+ 'e' => 'Dragonfruit',
188
+ 'f' => 'Hintomint',
189
+ 'g' => 'Bananacream',
190
+ 'h' => 'Cloudwhite',
191
+ 'i' => 'Cornflower',
192
+ 'j' => 'Oldlace',
193
+ 'k' => 'Koala',
194
+ 'm' => 'Lavender',
195
+ 'n' => 'Glacier',
196
+ 'o' => 'Redvelvet',
197
+ 'p' => 'Verdigris',
198
+ 'q' => 'Icicle',
199
+ 'r' => 'Onyx',
200
+ 's' => 'Hyacinth',
201
+ 't' => 'Martian',
202
+ 'u' => 'Hotcocoa',
203
+ 'v' => 'Shamrock',
204
+ 'w' => 'Firstblush',
205
+ 'x' => ''
206
+ }
207
+ },
208
+ colorsecondary: {
209
+ genes: '20-23',
210
+ name: 'Highlight Color', code: 'HC', ## color2 / colorsecondary / sec color / pattern color
211
+ kai: {
212
+ '1' => 'Cyborg',
213
+ '2' => 'Springcrocus',
214
+ '3' => 'Egyptiankohl',
215
+ '4' => 'Poisonberry',
216
+ '5' => 'Lilac',
217
+ '6' => 'Apricot',
218
+ '7' => 'Royalpurple',
219
+ '8' => 'Padparadscha',
220
+ '9' => 'Swampgreen',
221
+ 'a' => 'Violet',
222
+ 'b' => 'Scarlet',
223
+ 'c' => 'Barkbrown',
224
+ 'd' => 'Coffee',
225
+ 'e' => 'Lemonade',
226
+ 'f' => 'Chocolate',
227
+ 'g' => 'Butterscotch',
228
+ 'h' => 'Ooze',
229
+ 'i' => 'Safetyvest',
230
+ 'j' => 'Turtleback',
231
+ 'k' => 'Rosequartz',
232
+ 'm' => 'Wolfgrey',
233
+ 'n' => 'Cerulian',
234
+ 'o' => 'Skyblue',
235
+ 'p' => 'Garnet',
236
+ 'q' => 'Peppermint',
237
+ 'r' => 'Universe',
238
+ 's' => 'Royalblue',
239
+ 't' => 'Mertail',
240
+ 'u' => 'Inflatablepool',
241
+ 'v' => 'Pearl',
242
+ 'w' => 'Prairierose',
243
+ 'x' => ''
244
+ }
245
+ },
246
+ colortertiary: {
247
+ genes: '24-27',
248
+ name: 'Accent Color', code: 'AC', ## color3 / colortertiary
249
+ kai: {
250
+ '1' => 'Belleblue',
251
+ '2' => 'Sandalwood',
252
+ '3' => 'Peach',
253
+ '4' => 'Icy',
254
+ '5' => 'Granitegrey',
255
+ '6' => 'Cashewmilk',
256
+ '7' => 'Kittencream',
257
+ '8' => 'Emeraldgreen',
258
+ '9' => 'Kalahari',
259
+ 'a' => 'Shale',
260
+ 'b' => 'Purplehaze',
261
+ 'c' => 'Hanauma',
262
+ 'd' => 'Azaleablush',
263
+ 'e' => 'Missmuffett',
264
+ 'f' => 'Morningglory',
265
+ 'g' => 'Frosting',
266
+ 'h' => 'Daffodil',
267
+ 'i' => 'Flamingo',
268
+ 'j' => 'Buttercup',
269
+ 'k' => 'Bloodred',
270
+ 'm' => 'Atlantis',
271
+ 'n' => 'Summerbonnet',
272
+ 'o' => 'Periwinkle',
273
+ 'p' => 'Patrickstarfish',
274
+ 'q' => 'Seafoam',
275
+ 'r' => 'Cobalt',
276
+ 's' => 'Mallowflower',
277
+ 't' => 'Mintmacaron',
278
+ 'u' => 'Sully',
279
+ 'v' => 'Fallspice',
280
+ 'w' => 'Dreamboat',
281
+ 'x' => ''
282
+ }
283
+ },
284
+ wild: {
285
+ genes: '28-31',
286
+ name: 'Wild Element', code: 'WE',
287
+ kai: {
288
+ 'h' => 'Littlefoot',
289
+ 'i' => 'Elk',
290
+ 'j' => 'Ducky',
291
+ 'k' => 'Trioculus',
292
+ 'm' => 'Daemonwings',
293
+ 'n' => 'Featherbrain',
294
+ 'o' => 'Flapflap',
295
+ 'p' => 'Daemonhorns',
296
+ 'q' => 'Dragontail',
297
+ 'r' => 'Aflutter',
298
+ 's' => 'Foghornpawhorn',
299
+ 't' => 'Unicorn',
300
+ 'u' => 'Dragonwings',
301
+ 'v' => 'Alicorn',
302
+ 'w' => 'Wyrm',
303
+ 'x' => ''
304
+ }
305
+ },
306
+ mouth: {
307
+ genes: '32-35',
308
+ name: 'Mouth', code: 'MO',
309
+ kai: {
310
+ '1' => 'Whixtensions',
311
+ '2' => 'Wasntme',
312
+ '3' => 'Wuvme',
313
+ '4' => 'Gerbil',
314
+ '5' => 'Confuzzled',
315
+ '6' => 'Impish',
316
+ '7' => 'Belch',
317
+ '8' => 'Rollercoaster',
318
+ '9' => 'Beard',
319
+ 'a' => 'Pouty',
320
+ 'b' => 'Saycheese',
321
+ 'c' => 'Grim',
322
+ 'd' => 'Fangtastic',
323
+ 'e' => 'Moue',
324
+ 'f' => 'Happygokitty',
325
+ 'g' => 'Soserious',
326
+ 'h' => 'Cheeky',
327
+ 'i' => 'Starstruck',
328
+ 'j' => 'Samwise',
329
+ 'k' => 'Ruhroh',
330
+ 'm' => 'Dali',
331
+ 'n' => 'Grimace',
332
+ 'o' => 'Majestic',
333
+ 'p' => 'Tongue',
334
+ 'q' => 'Yokel',
335
+ 'r' => 'Topoftheworld',
336
+ 's' => 'Neckbeard',
337
+ 't' => 'Satiated',
338
+ 'u' => 'Walrus',
339
+ 'v' => 'Struck',
340
+ 'w' => 'Delite',
341
+ 'x' => ''
342
+ }
343
+ },
344
+ environment: {
345
+ genes: '36-39',
346
+ name: 'Environment', code: 'EN',
347
+ kai: {
348
+ 'h' => 'Salty',
349
+ 'i' => 'Dune',
350
+ 'j' => 'Juju',
351
+ 'k' => 'Tinybox',
352
+ 'm' => 'Myparade',
353
+ 'n' => 'Finalfrontier',
354
+ 'o' => 'Metime',
355
+ 'p' => 'Drift',
356
+ 'q' => 'Secretgarden',
357
+ 'r' => 'Frozen',
358
+ 's' => 'Roadtogold',
359
+ 't' => 'Jacked',
360
+ 'u' => 'Floorislava',
361
+ 'v' => 'Prism',
362
+ 'w' => 'Junglebook',
363
+ 'x' => ''
364
+ }
365
+ },
366
+ secret: {
367
+ genes: '40-43',
368
+ name: 'Secret Y Gene', code: 'SE', ## todo: change to Y Gene or Y (see https://guide.cryptokitties.co/guide/cat-features/genes)
369
+ kai: { }
370
+ },
371
+ prestige: {
372
+ genes: '44-47',
373
+ name: 'Purrstige', code: 'PU',
374
+ kai: { }
375
+ ## prune, furball, duckduckcat, or thatsawrap - more like fancies (not really traits)
376
+ }
377
+ }
@@ -1,550 +1,158 @@
1
- # encoding: utf-8
2
-
3
- ###
4
- #
5
- # for latest updates on new fancies/exclusives see:
6
- # https://updates.cryptokitties.co (official latest updates/timeline)
7
- #
8
- # or see
9
- # https://blog.kotobaza.co/timeline/
10
-
11
-
12
- ##
13
- ## todo/fix:
14
- ## use count: for time-limited fancies do NOT use limit!!! change limit to count!!!
15
-
16
- ##
17
- ## note:
18
- ## for time limits for fancies use:
19
- ## e.g. time: { end: '2018-12-07' } # until dec/7
20
- ##
21
- ## for overflows for limited edition use:
22
- ## e.g. overflow: 1 # 888+1 (=889)
23
-
24
-
25
- ### todo/fix:
26
- ## split into EXCLUSIVES
27
- ## and into SPECIAL_EDITIONS (SPECIALS?) - why? why not?
28
-
29
-
30
-
31
- FANCIES =
32
- {
33
- # Apr 27, 2019
34
- # Krakitten Fancy Cat is discovered. Fancy Cat
35
- krakitten: { name: 'Krakitten',
36
- recipe: {
37
- time: { start: '2019-04-27', end: '2019-05-06' },
38
- traits: ['cobalt', 'ducky', 'salty', 'splat']}
39
- },
40
- # Apr 13, 2019
41
- # Furbeard Fancy Cat is discovered. Fancy Cat
42
- furbeard: { name: 'Furbeard', date: '2019-04-13',
43
- recipe: {
44
- limit: 3733, ### todo -check if furbear was time windowed???
45
- traits: ['inflatablepool', 'hanauma', 'neckbeard']}
46
- },
47
-
48
- # Apr 10, 2019
49
- # Sparkles Special Edition Cat is released.Special Edition Cat
50
- sparkles: { name: 'Sparkles', date: '2019-04-10',
51
- specialedition: {
52
- limit: 100 },
53
- desc: 'Freebie for CryptoKitties Community Events'
54
- },
55
-
56
- papacatuanuku: { name: 'Papacatuanuku', date: '2019-03-31',
57
- exclusive: {
58
- limit: 1, ids: [1500000] },
59
- desc: 'Kitty #1500000'
60
- },
61
-
62
- # Mar 30, 2019
63
- # Glitter Fancy Cat is discovered. Fancy Cat
64
- glitter: { name: 'Glitter',
65
- recipe: {
66
- time: { start: '2019-03-30', end: '2019-11-30'},
67
- traits: ['rorschach', 'juju', 'unicorn', 'hyacinth'] }
68
- },
69
-
70
-
71
- # Mar 26, 2019
72
- # Sir Meowsalot Exclusive Cat is released. Exclusive Cat
73
- sirmeowsalot: { name: 'Sir Meowsalot', date: '2019-03-26',
74
- exclusive: {
75
- limit: 21, ids: (201..221).to_a }
76
- },
77
-
78
- # Mar 16, 2019
79
- # Clover Fancy Cat is discovered. Fancy Cat
80
- clover: { name: 'Clover', date: '2019-03-16',
81
- recipe: {
82
- limit: 2506,
83
- traits: ['shamrock', 'emeraldgreen', 'roadtogold', 'PU27'] },
84
- desc: "Celebrating St. Patrick's Day 2019 (March/19th)"
85
- },
86
-
87
- # Mar 2, 2019
88
- # Glasswalker Fancy Cat is discovered. Fancy Cat
89
- glasswalker: { name: 'Glasswalker', date: '2019-03-02',
90
- recipe: {
91
- limit: 1230,
92
- traits: ['cloudwhite', 'henna', 'pearl', 'firedup'] },
93
- desc: "Ninja Fancy Cat"
94
- },
95
-
96
- cyberberry: { name: 'Cyber Berry', date: '2019-03-02',
97
- exclusive: {
98
- limit: 1, ids: [282] },
99
- desc: "Winner of the NFTme Sweetstakes"
100
- },
101
-
102
- # Mar 1, 2019
103
- # Hinecatone Exclusive Cat is discovered. Exclusive Cat
104
- hinecatone: { name: 'Hinecatone', date: '2019-03-01',
105
- exclusive: {
106
- limit: 15, ids: [1423547, 1433380, 1433486, 1440835, 1453366, 1456935, 1456973, 1459319, 1463197, 1466118, 1474082, 1484593, 1484982, 1492154, 1498885]}
107
- },
108
-
109
-
110
- # Feb 21, 2019
111
- # Ande Fancy Cat is discovered. Fancy Cat
112
- ande: { name: 'Ande', date: '2019-02-21',
113
- recipe: {
114
- limit: 440,
115
- traits: ['munchkin', 'cashewmilk', 'moue', 'PU30', 'WE10'] }
116
- },
117
- # Feb 17, 2019
118
- # Al Fancy Cat is discovered. Fancy Cat
119
- al: { name: 'Al',
120
- recipe: {
121
- time: { start: '2019-02-17', end: '2019-12-01'},
122
- traits: ['munchkin','moue','cashewmilk','brownies'] }
123
- },
124
- # Feb 16, 2019
125
- # Pizzazz Fancy Cat is discovered.Fancy Cat
126
- pizzazz: { name: 'Pizzazz',
127
- recipe: {
128
- time: { start: '2019-02-16', end: '2019-12-01'},
129
- traits: ['mekong', 'scarlet', 'spangled', 'wonky'] }
130
- },
131
-
132
- # Feb 15, 2019
133
- # Felono Exclusive Cat is discovered. Exclusive Cat
134
- felono: { name: 'Felono', date: '2019-02-15',
135
- exclusive: {
136
- limit: 30, ids: [1394641, 1404595, 1406021, 1413065, 1414375, 1420553, 1421315, 1421864, 1424104 ,1425433, 1431823, 1435517, 1436333, 1449860, 1451482, 1455458, 1459320, 1462952, 1463069, 1476999, 1483225, 1487210, 1487551, 1489681, 1490345, 1491632, 1492206, 1492739, 1492817, 1498778]}
137
- },
138
-
139
- # Feb 9, 2019
140
- # Miss Purrfect Fancy Cat is discovered.Fancy Cat
141
- misspurrfect: { name: 'Miss Purrfect', date: '2019-02-09',
142
- recipe: {
143
- limit: 1298,
144
- traits: ['allyouneed', 'butterscotch', 'asif', 'satiated', 'flapflap']},
145
- desc: "Celebrating St. Valentine's Day 2019 (Feb/14th)"
146
- },
147
-
148
- ## 2019
149
- ## January
150
-
151
- # Jan 26, 2019
152
- # Squib Fancy Cat is discovered. Fancy Cat
153
- squib: { name: 'Squib', date: '2019-01-26',
154
- recipe: {
155
- limit: 1443,
156
- traits: ['oldlace', 'razzledazzle', 'buzzed', 'rollercoaster']},
157
- desc: 'Celebrating American Football Super Bowl LIII in 2019'
158
- },
159
-
160
- tallythepurrocious: { name: 'Tally The Purrocious',
161
- recipe: {
162
- time: { start: '2019-01-10', end: '2019-01-21' }, count: 3992,
163
- traits: ['selkirk', 'koala', 'arcreactor', 'sully'] },
164
- desc: 'Gods Unchained Promotion - Mystical Cat Talisman'
165
- },
166
- ## date: '2019-01-10 ??? -- use for date "announced" or something - why? why not?
167
- aeoncat: { name: 'Aeoncat',
168
- specialedition: {
169
- time: { start: '2019-01-17', end: '2019-01-28' },
170
- limit: 380 }, ## Don't sleep - there's only 380 up for grabs!
171
- desc: 'Goddess Aeona - Goddess of Nature - Gods Unchained Promotion'
172
- },
173
- hypurrion: { name: 'Hypurrion', date: '2019-01-10',
174
- exclusive: {
175
- limit: 1, ids: [269]},
176
- desc: 'Hyperion - Mythic Titan of Light - Gods Unchained Promotion'
177
- },
178
-
179
- ## 2018
180
- ## December
181
- catzy: { name: 'Catzy', date: '2018-12-31',
182
- specialedition: {
183
- limit: 10, ids: (1137653..1137662).to_a },
184
- desc: 'Changpeng "CZ" Zhao - CEO of Binance - Top 10 Blockchain Influencer of the Year 2018 by CoinDesk'
185
- },
186
- purremyallaire: { name: 'Purremy Allaire', date: '2018-12-31',
187
- specialedition: {
188
- limit: 10, ids: (1137663..1137672).to_a },
189
- desc: 'Jeremy Allaire - Top 10 Blockchain Influencer of the Year 2018 by CoinDesk'
190
- },
191
- genedough: { name: 'Gene Dough',
192
- recipe: {
193
- time: { start: '2018-12-23', end: '2019-01-07' }, count: 1376,
194
- traits: ['hotcocoa', 'mittens', 'frosting'] }
195
- },
196
- pawrula: { name: 'Pawrula the Bright',
197
- recipe: {
198
- time: { start: '2018-12-15', end: '2019-11-30' },
199
- traits: ['camo', 'butterscotch', 'fox'] },
200
- desc: 'Neha Narula - Director of the Digital Currency Initiative at the MIT Media Lab'
201
- },
202
-
203
- ## November
204
- draco: { name: 'Draco',
205
- recipe: {
206
- time: { start: '2018-11-30', end: '2018-12-07' }, count: 1115,
207
- traits: ['toyger', 'martian', 'peppermint', 'dragonwings', 'SE03'] }
208
- },
209
- dracothemagnificent: { name: 'Draco The Magnificent', date: '2018-11-27',
210
- exclusive: {
211
- limit: 12, ids: (270..281).to_a }
212
- },
213
- bugcatv2: { name: 'Bug Cat V2', date: '2018-11-27',
214
- exclusive: {
215
- limit: 20, ids: (167..186).to_a },
216
- desc: 'Bug Bounty II (Offers Contract) Kitty'
217
- },
218
- dracojunior: { name: 'Draco Junior',
219
- recipe: {
220
- time: { start: '2018-11-26', end: '2018-12-07' }, count: 1398,
221
- traits: ['lynx', 'verdigris', 'dragontail', 'SE03']}
222
- },
223
- dreggo: { name: 'Dreggo',
224
- recipe: {
225
- time: { start: '2018-11-21', end: '2018-12-07' }, count: 3624,
226
- traits: ['siberian', 'bananacream', 'SE03'] }
227
- },
228
- pickles: { name: 'Pickles', date: '2018-11-14',
229
- recipe: {
230
- limit: 303,
231
- traits: ['lynx', 'martian', 'highsociety', 'emeraldgreen']}
232
- },
233
- lilbub: { name: 'Lil Bub Ub Bub (BUB)', date: '2018-11-13',
234
- specialedition: {
235
- limit: 468 }
236
- },
237
-
238
- lilbubthemagicalspacecat: { name: 'Lil Bub Ub Bub (BUB) The Magical Space Cat', date: '2018-11-13',
239
- exclusive: {
240
- limit: 3, ids: [266,267,268]}
241
- },
242
-
243
- ## October
244
- dukecat: { name: 'Dukecat', date: '2018-10-18',
245
- recipe: {
246
- limit: 1366,
247
- traits: ['cymric', 'periwinkle', 'simple', 'tongue']}
248
- },
249
- sheilapurren: { name: 'Sheila Purren', date: '2018-10-04',
250
- recipe: {
251
- limit: 1971,
252
- traits: ['mauveover', 'icy', 'wingtips', 'fangtastic']},
253
- desc: 'Sheila Warren Kitty-fied - Head of Blockchain and Distributed Ledger Technology at the World Economic Forum (WEF)'
254
- },
255
-
256
- ## September
257
- pawzilla: { name: 'Pawzilla', date: '2018-09-22',
258
- recipe: {
259
- limit: 1185,
260
- traits: ['jaguar', 'universe', 'atlantis', 'littlefoot']}
261
- },
262
- vulcat: { name: 'Vulcat', date: '2018-09-12',
263
- exclusive: {
264
- limit: 1, ids: [1000000] },
265
- desc: '1 000 000th Kitty'
266
- },
267
- meowstro: { name: 'Meowstro', date: '2018-09-09',
268
- recipe: {
269
- limit: 1698,
270
- traits: ['onyx', 'wowza', 'eclipse']}
271
- },
272
- atlas: { name: 'Atlas', date: '2018-09-07',
273
- recipe: {
274
- limit: 998,
275
- traits: ['highlander', 'kittencream', 'swarley', 'topoftheworld']}
276
- },
277
-
278
- ## August
279
- vulcant: { name: 'Vulcant', date: '2018-08-31',
280
- exclusive: {
281
- limit: 20, ids: [932914,937360,938299,946526,948925,949058,950617,952280,952981,956374,956908,958570,964205,967234,983046,984451,990713,992861,995745,997469] }
282
- },
283
- purrity: { name: 'Purrity', date: '2018-08-23',
284
- recipe: {
285
- limit: 5984,
286
- traits: ['selkirk', 'chronic', 'cloudwhite', 'cheeky'] }
287
- },
288
- rabbidkitty: { name: 'Rabbid Kitty', date: '2018-08-23',
289
- exclusive: {
290
- limit: 6, ids: (260..265).to_a },
291
- desc: 'Ubisoft Blockchain Heroes Hackathon'
292
- },
293
- squiddlesworth: { name: 'Squiddlesworth', date: '2018-08-16',
294
- recipe: {
295
- limit: 1510,
296
- traits: ['sphynx', 'redvelvet', 'patrickstarfish', 'dragontail'] },
297
- desc: 'Lava Squid Cat'
298
- },
299
-
300
- ## July
301
- purrspero: { name: 'Purrspero', date: '2018-07-27',
302
- recipe: {
303
- limit: 4448,
304
- traits: ['dippedcone', 'googly', 'royalpurple', 'beard']}
305
- },
306
- catbury: { name: 'Catbury', date: '2018-07-25',
307
- recipe: {
308
- limit: 76,
309
- traits: ['ragdoll', 'crazy', 'chocolate', 'mintmacaron', 'yokel', 'WE02']}
310
- },
311
- honu: { name: 'Honu', date: '2018-07-20',
312
- exclusive: {
313
- limit: 1, ids: [251] },
314
- desc: 'Kitties for Good - Save Turtle Habitats'
315
- },
316
- victoire: { name: 'Victoire', date: '2018-07-18',
317
- exclusive: {
318
- limit: 1, ids: [402] },
319
- desc: 'France Football World Cup Champion'
320
- },
321
- lulu: { name: 'Lulu', date: '2018-07-13',
322
- recipe: {
323
- limit: 999,
324
- traits: ['cyan', 'verdigris', 'turtleback', 'salty']}
325
- },
326
- boot: { name: 'Boot', date: '2018-07-05',
327
- recipe: {
328
- limit: 1440,
329
- traits: ['ganado', 'wiley', 'cerulian', 'rollercoaster'],
330
- variants: {
331
- belgium: { name: 'Belgium', count: 97, traits: [['orangesoda','onyx']]}, ## Base Color: Orangesoda / Onyx
332
- brazil: { name: 'Brazil', count: 195, traits: [['hintomint','bananacream','verdigris']]}, ## Base Color: Hintomint / Bananacream / Verdigris
333
- croatia: { name: 'Croatia', count: 253, traits: [['cottoncandy','mauveover','oldlace']]}, ## Base Color: Cottoncandy / Mauveover / Oldlace
334
- england: { name: 'England', count: 168, traits: [['greymatter','martian']]}, ## Base Color: Greymatter / Martian
335
- france: { name: 'France', count: 317, traits: [['harbourfog','cinderella','lavender']]}, ## Base Color: Harbourfog / Cinderella / Lavender
336
- russia: { name: 'Russia', count: 94, traits: [['shadowgrey','salmon','cloudwhite']]}, ## Base Color: Shadowgrey / Salmon/ Cloudwhite
337
- sweden: { name: 'Sweden', count: 123, traits: [['brownies','dragonfruit','redvelvet']]}, ## Base Color: Brownies / Dragonfruit / Redvelvet
338
- uruguay: { name: 'Uruguay', count: 193, traits: [['aquamarine','nachocheez','koala']]}, ## Base Color: Aquamarine / Nachocheez / Koala
339
- }},
340
- desc: 'Football World Cup',
341
- },
342
- ## note: boot - different variants for world cup teams
343
- ## Although there are 8 unique Fancies, they're actually each a variant on the same Fancy - Boot.
344
- ## Their colours are different, and you can collect all 8 as a set
345
-
346
- ## June
347
- raspoutine: { name: 'Raspoutine', date: '2018-06-28',
348
- recipe: {
349
- limit: 1867,
350
- traits: ['buzzed', 'nachocheez', 'sandalwood', 'belch']}
351
- },
352
- furlin: { name: 'Furlin', date: '2018-06-26',
353
- exclusive: {
354
- limit: 52, ids: (115..126).to_a + (128..166).to_a }
355
- },
356
- kittypride: { name: 'Kitty Pride', date: '2018-06-21',
357
- recipe: {
358
- limit: 1316,
359
- traits: ['fabulous','cinderella','garnet']}
360
- },
361
- furrmingo: { name: 'Furrmingo', date: '2018-06-14',
362
- recipe: {
363
- limit: 333,
364
- traits: ['bobtail', 'egyptiankohl', 'flamingo', 'whixtensions']}
365
- },
366
-
367
- ## May
368
- page: { name: 'Page', date: '2018-05-31',
369
- recipe: {
370
- limit: 50_000,
371
- traits: ['rascal', 'peach', 'wasntme' ]}
372
- },
373
- "schrödingerscat": { name: "Schrödinger's Cat", date: '2018-05-20',
374
- recipe: {
375
- limit: 73,
376
- traits: ['forgetmenot','tinybox','PU20','SE25']}
377
- },
378
- chatplongeur: { name: 'Chat Plongeur', date: '2018-05-19',
379
- recipe: {
380
- limit: 1910,
381
- traits: ['aquamarine', 'skyblue', 'seafoam'] }
382
- },
383
- docpurr: { name: 'Doc Purr', date: '2018-05-16',
384
- recipe: {
385
- limit: 250,
386
- traits: ['persian','spock','raisedbrow','violet','tongue'] }
387
- },
388
- celestialcyberdimension: { name: 'Celestial Cyber Dimension', date: '2018-05-12',
389
- exclusive: {
390
- limit: 1, ids: [127] }
391
- },
392
- swish: { name: 'Swish', date: '2018-05-08',
393
- recipe: {
394
- limit: 2880,
395
- traits: ['norwegianforest', 'luckystripe', 'thicccbrowz', 'orangesoda'] }
396
- },
397
-
398
- ## April
399
- flutterbee: { name: 'Flutterbee', date: '2018-04-28',
400
- recipe: {
401
- limit: 275,
402
- traits: ['cloudwhite','jaguar','lemonade','azaleablush','WE14'] }
403
- },
404
- vernon: { name: 'Vernon', date: '2018-04-16',
405
- recipe: {
406
- limit: 320,
407
- traits: ['amur','fabulous','cottoncandy','springcrocus','belleblue','soserious']},
408
- desc: 'Spring Equinox Kitty' ## first, see https://www.cryptokitties.co/kitty/696398
409
- },
410
-
411
- ## March
412
- berry: { name: 'Berry', date: '2018-03-16',
413
- recipe: {
414
- limit: 200,
415
- traits: ['dragonfruit','thunderstruck','emeraldgreen','apricot','simple'] }
416
- },
417
- pussforprogress: { name: 'Puss For Progress', date: '2018-03-08',
418
- recipe: {
419
- limit: 1920,
420
- traits: ['himalayan','peach','safetyvest','gerbil'] },
421
- desc: "Women's Day"
422
- },
423
- fortunecat: { name: 'Fortune Cat', name_cn: '红包喵', date: '2018-03-08',
424
- recipe: {
425
- limit: 888,
426
- traits: ['harbourfog','calicool','swampgreen','sapphire','beard']}
427
- }, ## todo: check date for china launch specials!!!
428
- goldendragoncat: { name: 'Golden Dragon Cat', name_cn: '帝龙喵', date: '2018-03-08',
429
- exclusive: {
430
- limit: 1, ids: [888] },
431
- desc: 'China Launch'
432
- }, ## todo: check date for china launch specials!!!
433
- goldendogcat: { name: 'Golden Dog Cat', name_cn: '旺财汪', date: '2018-03-08',
434
- exclusive: {
435
- limit: 11, ids: [1802,1803,1805,1806,1808,1809,1812,1816]+(1825..1828).to_a },
436
- desc: 'China Launch'
437
- }, ## todo: check date for china launch specials!!!
438
- liondance: { name: 'Lion Dance', name_cn: '咚咚锵', date: '2018-03-07',
439
- recipe: {
440
- limit: 888, overflow: 1, ## use count 889 ?? - why? why not?
441
- traits: ['manx','royalblue','googly','starstruck']}
442
- },
443
- dogcat: { name: 'Dog Cat', name_cn: '汪星爷', date: '2018-03-02',
444
- recipe: {
445
- limit: 88,
446
- traits: ['tigerpunk','periwinkle','barkbrown','sweetmeloncakes','yokel']},
447
- desc: 'Year of the Dog (Greater China)'
448
- },
449
- knightkitty: { name: 'Knight Kitty', date: '2018-03-01',
450
- exclusive: {
451
- limit: 11, ids: (104..114).to_a }
452
- },
453
-
454
- ## February
455
- tabby: { name: 'Tabby', date: '2018-02-26',
456
- recipe: {
457
- limit: 250,
458
- traits: ['ragamuffin','morningglory','otaku','cheeky'] }
459
- },
460
- yuricatsuki: { name: 'Yuri Catsuki', date: '2018-02-20',
461
- recipe: {
462
- limit: 250,
463
- traits: ['cymric','tiger','neckbeard','elk'] },
464
- desc: 'Figure Scating Kitty - Winter Olympics (Korea)'
465
- },
466
- misterpurrfect: { name: 'Mister Purrfect', date: '2018-02-14',
467
- recipe: {
468
- limit: 1000,
469
- traits: ['chocolate','baddate','strawberry','wuvme'] },
470
- desc: "Valentine's Day"
471
- },
472
- earnie: { name: 'Earnie', date: '2018-02-13',
473
- recipe: {
474
- limit: 500,
475
- traits: ['birman','orangesoda','hotrod','grim'] },
476
- desc: 'Earn.com - Golden Kitty Award (Product Hunt)'
477
- },
478
- cathena: { name: 'Cathena', date: '2018-02-06',
479
- exclusive: {
480
- limit: 1, ids: [500000] },
481
- desc: '500 000th Kitty'
482
- },
483
-
484
- ## January
485
- 'momo-chan': { name: 'Momo-chan', date: '2018-01-31',
486
- recipe: {
487
- limit: 500,
488
- traits: ['onyx','henna','bloodred','wolfgrey','sass'] },
489
- desc: 'Ninja Kitty'
490
- },
491
- negato: { name: 'Negato', date: '2018-01-29',
492
- recipe: {
493
- limit: 500,
494
- traits: ['onyx','henna','wolfgrey','slyboots'] },
495
- desc: 'Ninja Kitty'
496
- },
497
- stitches: { name: 'Stitches', date: '2018-01-10',
498
- recipe: {
499
- limit: 500,
500
- traits: ['hintomint','seafoam','swampgreen','saycheese'] },
501
- desc: 'Zombie Kitty'
502
- },
503
-
504
- ## 2017
505
- ## December
506
- phuziqaat: { name: 'Phu Ziqaat', date: '2017-12-31',
507
- recipe: {
508
- limit: 1000,
509
- traits: ['chartreux','spock','alien','pouty'] },
510
- desc: 'Alien Kitty'
511
- },
512
- santaclaws: { name: 'Santa Claws', date: '2017-12-12',
513
- recipe: {
514
- limit: 1000, overflow: 2,
515
- traits: ['cloudwhite','scarlet','beard','wild_d'] },
516
- desc: 'Ho Ho Ho - Santa Claus Kitty'
517
- },
518
- mistletoe: { name: 'Mistletoe', date: '2017-12-09',
519
- recipe: {
520
- limit: 2000,
521
- traits: ['oldlace','crazy','gerbil'] },
522
- desc: "XMas Kitty"
523
- },
524
- dracula: { name: 'Dracula', date: '2017-12-01',
525
- recipe: {
526
- limit: 2000,
527
- traits: ['laperm','spock','strawberry','WE01'] }
528
- },
529
-
530
- ## November
531
- ducat: { name: 'Du Cat', date: '2017-11-29',
532
- recipe: {
533
- limit: 10_000,
534
- traits: ['cymric','tongue']}
535
- },
536
- genesis: { name: 'Genesis', date: '2017-11-24',
537
- exclusive: {
538
- limit: 1, ids: [1] },
539
- desc: '1st Kitty'
540
- },
541
- shipcat: { name: 'Ship Cat', date: '2017-11-23',
542
- recipe: {
543
- limit: 2000,
544
- traits: ['sphynx','orangesoda','luckystripe','crazy']}
545
- },
546
- bugcat: { name: 'Bug Cat', date: '2017-11-23',
547
- exclusive: {
548
- limit: 3, ids: [101,102,103] },
549
- desc: 'Bug Bounty Kitty' }
550
- }
1
+ # encoding: utf-8
2
+
3
+
4
+ class Fancy
5
+
6
+ def self.special_editions() @@special_editions ||= []; end # special edition fancies
7
+ def self.exclusives() @@exclusives ||= []; end # exclusive fancies
8
+ def self.fancies() @@fancies ||= []; end # "normal" fancies
9
+
10
+
11
+
12
+ def self.fancies_by_key() @@fancies_by_key ||= {}; end
13
+ def self.fancies_by_name() @@fancies_by_name ||= {}; end
14
+
15
+ def self.find_by_key( key )
16
+ ## note: use (always) a **symbol** for key lookup for now
17
+ @@fancies_by_key[ key.downcase.to_sym ]
18
+ end
19
+
20
+ def self.find_by_name( name )
21
+ ## note: allow string AND symbols (thus, use .to_s !!!)
22
+ ## allow spaces e.g. Bug Cat is the same as BugCat
23
+ ## note: downcase name e.g. allow BugCat too (not just Bug Cat)
24
+ @@fancies_by_name[ name.gsub( / /, '' ).downcase.to_s ]
25
+ end
26
+
27
+ ## add "generic" convenience find helper
28
+ def self.find_by( **kwargs )
29
+ if kwargs[ :key ]
30
+ find_by_key( kwargs[ :key ] )
31
+ elsif kwargs[ :name ]
32
+ find_by_name( kwargs[ :name] )
33
+ else
34
+ ## todo/fix: throw argument except!!!
35
+ nil
36
+ end
37
+ end
38
+
39
+ def self.[]( key )
40
+ if key.is_a? Symbol ## e.g. :genesis, :bugcat, etc.
41
+ f = find_by_key( key )
42
+ f = find_by_name( key ) if f.nil? ## try fancy name next - why? why not?
43
+ f
44
+ else ## assume string
45
+ f = find_by_name( key ) ## search by key next - why? why not?
46
+ f
47
+ end
48
+ end
49
+
50
+
51
+ def self.each
52
+ @@fancies_by_key.each do |(key,fancy)|
53
+ yield( fancy )
54
+ end
55
+ end
56
+
57
+ def self.size() @@fancies_by_key.size; end ## todo: add length alias too? why? why not?
58
+
59
+
60
+
61
+
62
+
63
+ attr_accessor :key,
64
+ :name,
65
+ :name_cn,
66
+ :date,
67
+ :desc,
68
+ :exclusive,
69
+ :specialedition,
70
+ :recipe,
71
+ :count,
72
+ :limit,
73
+ :ids
74
+
75
+ def initialize( **kwargs )
76
+ update( kwargs )
77
+ end
78
+
79
+ def update( **kwargs )
80
+ kwargs.each do |name,value|
81
+ send( "#{name}=", value ) ## use "regular" plain/classic attribute setter
82
+ end
83
+ self ## return self for chaining
84
+ end
85
+
86
+ def exclusive?() @exclusive.nil? == false; end
87
+ def specialedition?() @specialedition.nil? == false; end
88
+ alias_method :special_edition?, :specialedition?
89
+ def recipe?() @recipe.nil? == false; end
90
+
91
+
92
+
93
+ ## auto-fill
94
+ FANCIES.each do |key,h|
95
+
96
+ date_str = h[:date]
97
+ date_str = h[:recipe][:time][:start] if date_str.nil? && h[:recipe]
98
+ date_str = h[:specialedition][:time][:start] if date_str.nil? && h[:specialedition]
99
+
100
+ date = Date.strptime( date_str, '%Y-%m-%d' )
101
+
102
+
103
+ name = h[:name]
104
+ name_cn = h[:name_cn] # add chinese name if present
105
+ desc = h[:desc]
106
+
107
+ exclusive = h[:exclusive]
108
+ specialedition = h[:specialedition]
109
+ recipe = h[:recipe]
110
+
111
+ attribs = {
112
+ key: key,
113
+ date: date,
114
+ name: name,
115
+ name_cn: name_cn,
116
+ desc: desc,
117
+ exclusive: exclusive,
118
+ specialedition: specialedition,
119
+ recipe: recipe,
120
+ }
121
+
122
+
123
+ ## todo: check for overflow - if overflow use limit+overflow = count
124
+ ## add traits and time windows
125
+ if exclusive
126
+ attribs = attribs.merge( limit: h[:exclusive][:limit],
127
+ count: h[:exclusive][:count],
128
+ ids: h[:exclusive][:ids] )
129
+ elsif specialedition
130
+ attribs = attribs.merge( limit: h[:specialedition][:limit],
131
+ count: h[:specialedition][:count] )
132
+ else ## assume "normal/regular" fancy with recipes
133
+ attribs = attribs.merge( limit: h[:recipe][:limit],
134
+ count: h[:recipe][:count] )
135
+ end
136
+
137
+
138
+ fancy = Fancy.new( **attribs )
139
+ pp fancy
140
+
141
+ if fancy.exclusive?
142
+ exclusives << fancy
143
+ elsif fancy.special_edition?
144
+ special_editions << fancy
145
+ else ## assume "normal/regular" fancy (with recipe)
146
+ fancies << fancy
147
+ end
148
+
149
+
150
+ ## note: key MUST be a symbol (NOT a string)
151
+ fancies_by_key[key] = fancy
152
+
153
+ ## note: downcase name and remove all spaces e.g. Bug Cat => bugcat
154
+ fancies_by_name[name.gsub( / /, '' ).downcase] = fancy
155
+ fancies_by_name[name_cn] = fancy if name_cn ## add chinese name too if present
156
+ end
157
+
158
+ end # class Fancy