kittyverse 0.2.0 → 0.3.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
  SHA1:
3
- metadata.gz: 2a18d03701f80f74f3e0d07c1a2177ea37f3413f
4
- data.tar.gz: e4e073120dd606eb075bb1f4a7d8563a86523420
3
+ metadata.gz: b83f8ccd15b5d6499f12627e7a8bb1261b33176b
4
+ data.tar.gz: 9086b03449228f510ac73ee7198fe9264744a93c
5
5
  SHA512:
6
- metadata.gz: 47cc05e33c8ab43eb07bc975044d49f3990f8b02a5483788b9cf057f3dd904c4c094f1c0a2ca67c4f6a92b50af93b392b1ecd9a5611cc9aa49d51774805c5955
7
- data.tar.gz: 886566ffaa738a43188dfad37de848c9d5ce9769ca09329e3f95015ab398a0858a9b4a347aa479c193c445a2944f31a73176e2afd14be0bb0af9195735070822
6
+ metadata.gz: 2bcfa16de3bb45b077bbfff8d503e87a7f28de68d55a2b1257b4540eb91ac5f28a88fceb94b814b7167b5b4a7aeb1812628fd33200ce81ae785fa90507c8f8c1
7
+ data.tar.gz: 22938b98bdd3bfb741033537516d28dff5f5b0e527571600c5016514e1969f7422fafa81885a9bcc0a5ae3823a918c681377ae5fc2daec0970784e08d8149fac
@@ -5,12 +5,15 @@ README.md
5
5
  Rakefile
6
6
  lib/kittyverse.rb
7
7
  lib/kittyverse/catalog.rb
8
+ lib/kittyverse/cattributes.rb
8
9
  lib/kittyverse/fancies.rb
9
10
  lib/kittyverse/links.rb
10
11
  lib/kittyverse/mewtations.rb
11
12
  lib/kittyverse/pages/genes.rb
13
+ lib/kittyverse/purrstige.rb
12
14
  lib/kittyverse/traits.rb
13
15
  lib/kittyverse/traits_timeline.rb
14
16
  lib/kittyverse/version.rb
15
17
  test/helper.rb
18
+ test/test_cattributes.rb
16
19
  test/test_traits.rb
data/README.md CHANGED
@@ -34,28 +34,107 @@ t = Trait.find_by( name: 'Savannah' )
34
34
  t = Traits[ :body ][ '1' ]
35
35
  t = Traits[ :body ][ '00' ]
36
36
  t = Traits[ :body ][ 0 ]
37
- t = Traits['FU']['00']
38
- t = Traits['FU'][0]
39
- t = Traits[:FU][0]
40
- t = Traits[:FU00]
41
- t = Traits['Fur'][0]
37
+ t = Traits[ 'FU' ][ '00' ]
38
+ t = Traits[ 'FU' ][0]
39
+ t = Traits[ :FU ][0]
40
+ t = Traits[ :FU00 ]
41
+ t = Traits[ 'Fur' ][0]
42
42
  # ...
43
43
  ```
44
44
 
45
+ #### What about `totesbasic`?
46
+
47
+ Note, the `totesbasic` pattern cattribute has _three_ traits, that is, `totesbasic 1` with the code `PA14`
48
+ and `totesbasic 2` with `PA15` and `totesbasic 3` with `PA23`.
49
+ Use:
50
+
51
+ ``` ruby
52
+ t = Traits[ 'PA14' ]
53
+ p t.class #=> Trait
54
+ p t.name #=> "totesbasic 1"
55
+ p t.type.name #=> "Pattern"
56
+ p t.code #=> "PA14"
57
+ p t.kai #=> "f"
58
+
59
+ # -or-
60
+
61
+ t = Trait.find_by_code( 'PA14' )
62
+ t = Trait.find_by( code: 'PA14' )
63
+ t = Traits[ 'totesbasic 1' ]
64
+ t = Traits[ 'Totesbasic 1' ]
65
+ t = Trait.find_by_name( 'Totesbasic 1' )
66
+ t = Trait.find_by( name: 'Totesbasic 1' )
67
+ t = Traits[ :body ][ 'f' ]
68
+ t = Traits[ :body ][ '14' ]
69
+ t = Traits[ :body ][ 14 ]
70
+ # ...
71
+ ```
72
+
73
+
74
+
45
75
  For trait types (e.g. fur, pattern, eye color, eye shape, base color, etc.)
46
76
  use:
47
77
 
48
78
  ``` ruby
49
- t = Traits[ :body ]
50
- p t.class #=> TraitType
51
- p t.name #=> "Fur"
52
- p t.code #=> "FU"
53
- p t.genes #=> "0-3"
79
+ tt = Traits[ :body ]
80
+ p tt.class #=> TraitType
81
+ p tt.name #=> "Fur"
82
+ p tt.code #=> "FU"
83
+ p tt.genes #=> "0-3"
54
84
 
55
85
  # -or-
56
86
 
57
- t = TraitType.find_by_key( :body )
58
- t = TraitType.find_by( key: 'body' )
87
+ tt = TraitType.find_by_key( :body )
88
+ tt = TraitType.find_by( key: 'body' )
89
+ tt = Traits[ 'Fur' ]
90
+ tt = TraitType.find_by_name( 'Fur' )
91
+ tt = TraitType.find_by( name: 'Fur' )
92
+ tt = Traits[ 'FU' ]
93
+ tt = Traits[ :FU ]
94
+ tt = TraitType.find_by_code( 'FU' )
95
+ tt = TraitType.find_by( code: 'FU' )
96
+ # ...
97
+ ```
98
+
99
+
100
+ ### Cattributes
101
+
102
+ Use the `Cattribute` helper class to lookup cattributes incl. purrstige cattributes with timed trait recipes / forumlas:
103
+
104
+ ``` ruby
105
+ c = Cattribute[ 'savannah' ]
106
+ p c.class #=> Cattribute
107
+ p c.name #=> "savannah"
108
+ p c.type.name #=> "Fur"
109
+ p c.traits.size #=> 1
110
+ p c.traits #=> ["savannah"]
111
+ p c.traits[0].code #=> "FU00"
112
+ # ...
113
+
114
+ c = Cattribute[ 'totesbasic' ]
115
+ p c.class #=> Cattribute
116
+ p c.name #=> "totesbasic"
117
+ p c.type.name #=> "Pattern"
118
+ p c.traits.size #=> 3
119
+ p c.traits #=> ["totesbasic 1", "totesbasic 2", "totesbasic 3"]
120
+ p c.traits[0].code #=> "PA14"
121
+ p c.traits[1].code #=> "PA15"
122
+ p c.traits[2].code #=> "PA23"
123
+ # ...
124
+
125
+ c = Cattribute[ 'bionic' ]
126
+ p c.class #=> Cattribute
127
+ p c.name #=> "bionic"
128
+ p c.type.name #=> "Purrstige"
129
+ p c.traits.size #=> 0
130
+ p c.traits #=> []
131
+ p c.recipe #=> {time: {start: "2019-05-01", end: "2019-08-31"},
132
+ # traits: ["ragdoll",
133
+ # "WE05",
134
+ # ["totesbasic 1", "totesbasic 2", "totesbasic 3"],
135
+ # "PU30"]}
136
+
137
+ # ...
59
138
  ```
60
139
 
61
140
 
@@ -63,21 +142,28 @@ t = TraitType.find_by( key: 'body' )
63
142
 
64
143
  ## Real World Usage
65
144
 
66
- See the [copycats command line tool (and core library)](https://github.com/cryptocopycats/copycats) - crypto cats / kitties collectibles unchained - buy! sell! hodl! sire! - play for free - runs off the blockchain - no ether / gas required
145
+ ### Reference Pages / Cheat Sheets
67
146
 
147
+ Auto-generated CryptoKitties reference pages / cheat sheets include:
68
148
 
69
- ## More Documentation / Articles / Samples
149
+ - [**CryptoKitties Cattributes Rarity / Popularity Statistics**](CATTRIBUTES.md)
150
+ - [**CryptoKitties Updates - Fancy / Exclusive / Special Edition Cats - Timeline**](updates/FANCIES.md)
151
+ - [**CryptoKitties Updates - Purrstige Trait Recipes / Formulas - Timeline**](updates/PURRSTIGES.md)
152
+ - and others
70
153
 
71
- - [Programming Crypto Collectibles Step-by-Step Book / Guide](https://github.com/cryptocopycats/programming-cryptocollectibles) -
72
- Let's start with CryptoKitties & Copycats. Inside Unique Bits & Bytes on the Blockchain...
73
- - [Ruby Quiz - Challenge #8 - Base32 Alphabet](https://github.com/planetruby/quiz/tree/master/008) - Convert the Super "Sekretoooo" 256-Bit CryptoKitties Genome to Kai Notation - Annipurrsary!
74
154
 
75
155
 
156
+ ### More
76
157
 
158
+ See the [copycats command line tool (and core library)](https://github.com/cryptocopycats/copycats) - crypto cats / kitties collectibles unchained - buy! sell! hodl! sire! - play for free - runs off the blockchain - no ether / gas required
77
159
 
78
- ## Questions? Comments?
79
160
 
80
- Post them on the [cryptokitties reddit](https://www.reddit.com/r/cryptokitties). Thanks.
161
+ ## More Documentation / Articles / Samples
162
+
163
+ - [Programming Crypto Collectibles Step-by-Step Book / Guide](https://github.com/openblockchains/programming-cryptocollectibles) -
164
+ Let's start with CryptoKitties & Copycats. Inside Unique Bits & Bytes on the Blockchain...
165
+ - [Ruby Quiz - Challenge #8 - Base32 Alphabet](https://github.com/planetruby/quiz/tree/master/008) - Convert the Super "Sekretoooo" 256-Bit CryptoKitties Genome to Kai Notation - Annipurrsary!
166
+
81
167
 
82
168
 
83
169
  ## License
@@ -86,3 +172,8 @@ Post them on the [cryptokitties reddit](https://www.reddit.com/r/cryptokitties).
86
172
 
87
173
  The `kittyverse` scripts are dedicated to the public domain.
88
174
  Use it as you please with no restrictions whatsoever.
175
+
176
+
177
+ ## Questions? Comments?
178
+
179
+ Post them on the [cryptokitties reddit](https://www.reddit.com/r/cryptokitties). Thanks.
@@ -1,5 +1,11 @@
1
1
  # encoding: utf-8
2
2
 
3
+ ## std libs
4
+ require 'date'
5
+ require 'json'
6
+
7
+
8
+ ## 3rd party libs
3
9
  require 'base32-alphabets'
4
10
 
5
11
 
@@ -9,8 +15,10 @@ require 'kittyverse/traits'
9
15
  require 'kittyverse/traits_timeline'
10
16
  require 'kittyverse/mewtations'
11
17
  require 'kittyverse/fancies'
18
+ require 'kittyverse/purrstige'
12
19
  require 'kittyverse/catalog'
13
20
 
21
+
14
22
  require 'kittyverse/links'
15
23
  require 'kittyverse/pages/genes'
16
24
 
@@ -77,11 +85,16 @@ class TraitType
77
85
  # note: all keys are the same except:
78
86
  ALT_TRAIT_TYPE_KEYS =
79
87
  {
80
- :colorprimary => :color1,
81
- :colorsecondary => :color2,
82
- :colortertiary => :color3
88
+ # :colorprimary => :color1,
89
+ # :colorsecondary => :color2,
90
+ # :colortertiary => :color3
91
+
92
+ :color1 => :colorprimary,
93
+ :color2 => :colorsecondary,
94
+ :color3 => :colortertiary
83
95
  }
84
96
 
97
+
85
98
  def self.find_by_key( key )
86
99
  ## note: allow string AND symbols (thus, use .to_sym !!!)
87
100
  ## note: allow known alternative mappings/key (e.g. "internal" cryptokitties keys if different)
@@ -111,7 +124,7 @@ class TraitType
111
124
  'tertiary color' => 'accent color',
112
125
  'accent colour' => 'accent color', # british (canadian) spelling
113
126
  'wild' => 'wild element',
114
- 'secrect' => 'secret y gene'
127
+ 'secret' => 'secret y gene'
115
128
  }
116
129
 
117
130
  def self.find_by_name( name )
@@ -154,7 +167,8 @@ class TraitType
154
167
  :name,
155
168
  :code,
156
169
  :genes,
157
- :traits ## array of 32 traits
170
+ :traits, ## array of 32 traits
171
+ :cattributes ## array of 29/31/x cattributes
158
172
 
159
173
  def initialize( **kwargs )
160
174
  update( kwargs )
@@ -271,6 +285,9 @@ class Traits
271
285
  end # class Traits
272
286
 
273
287
 
288
+ require 'kittyverse/cattributes'
289
+
290
+
274
291
 
275
292
  # say hello
276
293
  puts Kittyverse.banner if defined?($RUBYLIBS_DEBUG) && $RUBYLIBS_DEBUG
@@ -3,29 +3,23 @@
3
3
 
4
4
  class Catalog ## todo: use a module - move to its own file - why? why not?
5
5
 
6
- @@specials = {} # special edition fancies
7
- @@exclusives = {} # exclusive fancies
8
- @@fancies = {} # "normal" fancies
9
-
10
- @@prestiges = {} # purrstige cattributes
6
+ @@special_editions = {} # special edition fancies
7
+ @@exclusives = {} # exclusive fancies
8
+ @@fancies = {} # "normal" fancies
11
9
 
12
10
 
13
11
  ## use special_cats, exclusive_cats, etc. - why? why not?
14
- def self.specials() @@specials; end
15
- def self.exclusives() @@exclusives; end
16
- def self.fancies() @@fancies; end
17
-
18
- ## use prestige(purrstige)_cattributes - why? why not?
19
- def self.prestiges() @@prestiges; end
12
+ def self.special_editions() @@special_editions; end
13
+ def self.exclusives() @@exclusives; end
14
+ def self.fancies() @@fancies; end
20
15
 
21
16
 
17
+ ## auto-fill
22
18
  FANCIES.each do |key,h|
23
- if h[:special]
24
- specials[key] = h
19
+ if h[:specialedition]
20
+ special_editions[key] = h
25
21
  elsif h[:exclusive]
26
22
  exclusives[key] = h
27
- elsif h[:prestige]
28
- prestiges[key] = h
29
23
  else
30
24
  fancies[key] = h
31
25
  end
@@ -0,0 +1,116 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ class Cattribute
5
+
6
+ def self.cattributes_by_name() @@cattributes_by_name ||= {}; end
7
+
8
+ def self.find_by_name( name )
9
+ ## note: allow string AND symbols (thus, use .to_s !!!)
10
+ ## note: downcase name e.g. allow Savannah too (not just savannah)
11
+ @@cattributes_by_name[ name.downcase.to_s ]
12
+ end
13
+
14
+ ## add "generic" convenience find helper
15
+ def self.find_by( **kwargs )
16
+ if kwargs[ :name ]
17
+ find_by_name( kwargs[ :name ] )
18
+ else
19
+ ## todo/fix: throw argument except!!!
20
+ nil
21
+ end
22
+ end
23
+
24
+ def self.[]( name ) find_by_name( name ); end
25
+
26
+
27
+
28
+ attr_accessor :type,
29
+ :name,
30
+ :traits,
31
+ :recipe
32
+
33
+ def initialize( **kwargs )
34
+ update( kwargs )
35
+ end
36
+
37
+ def update( **kwargs )
38
+ kwargs.each do |name,value|
39
+ send( "#{name}=", value ) ## use "regular" plain/classic attribute setter
40
+ end
41
+ self ## return self for chaining
42
+ end
43
+
44
+
45
+
46
+ ## autofill cattributes
47
+ TRAITS.each do |key, h|
48
+ puts "key: #{key}"
49
+
50
+ tt = Traits[ key ]
51
+ tt.cattributes ||= [] ## if nil make sure it's an empty array when starting
52
+ ## pp tt
53
+
54
+ next if [:secret, :prestige].include?( key)
55
+
56
+ h[:kai].each do |kai, trait_name|
57
+ ## 1) skip "unnamed" traits
58
+ next if trait_name =~ /_[1-9a-z]$/
59
+
60
+
61
+
62
+
63
+ ## 2) special case for totebasic - one cattribute, three traits
64
+ ## (that is, totesbasic 1, totesbasic 2, totesbasic 3)
65
+ if TOTESBASIC.include?( trait_name )
66
+ if trait_name == TOTESBASIC.first
67
+ t1 = Traits[ TOTESBASIC[0] ]
68
+ t2 = Traits[ TOTESBASIC[1] ]
69
+ t3 = Traits[ TOTESBASIC[2] ]
70
+
71
+ cattribute = Cattribute.new(
72
+ name: 'totesbasic',
73
+ type: tt,
74
+ traits: [t1,t2,t3]
75
+ )
76
+ else
77
+ next ## skip all other totesbasic traits
78
+ end
79
+ else
80
+ t = Traits[trait_name]
81
+ pp t.name
82
+
83
+ cattribute = Cattribute.new(
84
+ name: trait_name,
85
+ type: tt,
86
+ traits: [t]
87
+ )
88
+ ## pp cattribute
89
+ end
90
+
91
+ tt.cattributes << cattribute
92
+
93
+ cattributes_by_name[ cattribute.name ] = cattribute
94
+ end
95
+ end
96
+
97
+ ## add purrstiges traits
98
+ tt = Traits[:prestige]
99
+ tt.cattributes ||= [] ## if nil make sure it's an empty array when starting
100
+ PURRSTIGES.each do |key, h|
101
+ puts "key: #{key}"
102
+ pp h
103
+
104
+ cattribute = Cattribute.new(
105
+ name: key.to_s,
106
+ type: tt,
107
+ traits: [], ## empty traits
108
+ recipe: h[:recipe] ## todo/fix: add recipe as a struct (NOT as a hash)
109
+ )
110
+ tt.cattributes << cattribute
111
+
112
+ cattributes_by_name[ cattribute.name ] = cattribute
113
+ end
114
+
115
+
116
+ end # class Cattribute
@@ -9,6 +9,10 @@
9
9
  # https://blog.kotobaza.co/timeline/
10
10
 
11
11
 
12
+ ##
13
+ ## todo/fix:
14
+ ## use count: for time-limited fancies do NOT use limit!!! change limit to count!!!
15
+
12
16
  ##
13
17
  ## note:
14
18
  ## for time limits for fancies use:
@@ -18,195 +22,529 @@
18
22
  ## e.g. overflow: 1 # 888+1 (=889)
19
23
 
20
24
 
21
- ## use open - to mark "breedable" fancies - why? why not?
22
- ## open: true or use limit: nil ????
23
- ##
25
+ ### todo/fix:
26
+ ## split into EXCLUSIVES
27
+ ## and into SPECIAL_EDITIONS (SPECIALS?) - why? why not?
28
+
29
+
24
30
 
25
31
  FANCIES =
26
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
+
27
148
  ## 2019
28
149
  ## January
29
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
+ },
30
178
 
31
179
  ## 2018
32
180
  ## December
33
- catzy: { name: 'Catzy', date: '2018-12-31', limit: 10, ids: (1137653..1137662).to_a,
34
- special: true,
35
- desc: 'Changpeng "CZ" Zhao - CEO of Binance - Top 10 Blockchain Influencer of the Year 2018 by CoinDesk' },
36
- purremyallaire: { name: 'Purremy Allaire', date: '2018-12-31', limit: 10, ids: (1137663..1137672).to_a,
37
- special: true,
38
- desc: 'Jeremy Allaire - Top 10 Blockchain Influencer of the Year 2018 by CoinDesk' },
39
- genedough: { name: 'Gene Dough', date: '2018-12-23', time: { end: '2019-01-07' },
40
- traits: ['hotcocoa', 'mittens', 'frosting'],
41
- open: true },
42
- pawrula: { name: 'Pawrula the Bright', date: '2018-12-15', time: { start: '2018-12-15', end: '2019-11-30' },
43
- traits: ['camo', 'butterscotch', 'fox'],
44
- desc: 'Neha Narula - Director of the Digital Currency Initiative at the MIT Media Lab',
45
- open: true },
46
- reindeer: { name: 'Reindeer', date: '2018-12-14',
47
- time: { start: '2018-12-14', end: '2019-01-07' }, prestige: true,
48
- traits: ['elk', ['PU24','PU25','PU26','PU27']],
49
- open: true },
50
- holidaycheer: { name: 'Holidaycheer', date: '2018-12-14',
51
- time: { start: '2018-12-14', end: '2019-01-07' }, prestige: true,
52
- traits: ['elk', ['PU28','PU29']],
53
- open: true },
54
- lit: { name: 'Lit', date: '2018-12-14',
55
- time: { start: '2018-12-14', end: '2019-01-07' }, prestige: true,
56
- traits: ['elk', 'PU30'],
57
- open: true },
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
+ },
58
202
 
59
203
  ## November
60
- draco: { name: 'Draco', date: '2018-11-30', limit: 1115, time: { end: '2018-12-07' },
61
- traits: ['toyger', 'martian', 'peppermint', 'dragonwings', 'SE03']},
62
- dracothemagnificent: { name: 'Draco The Magnificent', date: '2018-11-27', limit: 12, exclusive: true, ids: (270..281).to_a },
63
- bugcatv2: { name: 'Bug Cat V2', date: '2018-11-27', limit: 20, exclusive: true, ids: (167..186).to_a, desc: 'Bug Bounty II (Offers Contract) Kitty' },
64
- dracojunior: { name: 'Draco Junior', date: '2018-11-26', limit: 1398, time: { end: '2018-12-07' },
65
- traits: ['lynx', 'verdigris', 'dragontail', 'SE03']},
66
- dreggo: { name: 'Dreggo', date: '2018-11-21', limit: 3624, time: { end: '2018-12-07' },
67
- traits: ['siberian', 'bananacream', 'SE03']},
68
- pickles: { name: 'Pickles', date: '2018-11-14', limit: 303,
69
- traits: ['lynx', 'martian', 'highsociety', 'emeraldgreen']},
70
- lilbub: { name: 'Lil Bub Ub Bub (BUB)', date: '2018-11-13', limit: 468, special: true }, ## for search use specialedition:
71
-
72
- lilbubthemagicalspacecat: { name: 'Lil Bub Ub Bub (BUB) The Magical Space Cat', date: '2018-11-13', limit: 3, exclusive: true, ids: [266,267,268] },
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
+ },
73
237
 
74
- ## October
75
- thatsawrap: { name: 'Thatsawrap', date: '2018-10-21', limit: 615, time: { start: '2018-10-20', end: '2018-11-06' }, prestige: true,
76
- traits: ['bobtail','WE00','PU28']},
77
- duckduckcat: { name: 'Duckduckcat', date: '2018-10-19', limit: 1249, time: { start: '2018-10-20', end: '2018-11-15' }, prestige: true,
78
- traits: ['neckbeard',['PU24','PU25','PU26']]}, ## Purrstige: PU24 / PU25 / PU26
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
+ },
79
242
 
80
- dukecat: { name: 'Dukecat', date: '2018-10-18', limit: 1366,
81
- traits: ['cymric', 'periwinkle', 'simple', 'tongue']},
82
- sheilapurren: { name: 'Sheila Purren', date: '2018-10-04', limit: 1971, desc: 'Sheila Warren Kitty-fied - Head of Blockchain and Distributed Ledger Technology at the World Economic Forum (WEF)',
83
- traits: ['mauveover', 'icy', 'wingtips', 'fangtastic']},
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
+ },
84
255
 
85
256
  ## September
86
- pawzilla: { name: 'Pawzilla', date: '2018-09-22', limit: 1185,
87
- traits: ['jaguar', 'universe', 'atlantis', 'littlefoot']},
88
- prune: { name: 'Prune', date: '2018-09-19', limit: 921, time: { start: '2018-09-18', end: '2018-09-30' }, prestige: true,
89
- traits: ['norwegianforest', 'totesbasic', 'PU25']}, ## todo/fix: check totesbasic - three genes!!! - check which one PA15?
90
- furball: { name: 'Furball', date: '2018-09-19', limit: 998, time: { start: '2018-09-19', end: '2018-09-30' }, prestige: true,
91
- traits: ['norwegianforest', 'totesbasic', 'PU26']}, ## todo/fix: check totesbasic - three genes!!! - check which one PA15?
92
- vulcat: { name: 'Vulcat', date: '2018-09-12', limit: 1, exclusive: true, ids: [1000000], desc: '1 000 000th Kitty' },
93
- meowstro: { name: 'Meowstro', date: '2018-09-09', limit: 1698,
94
- traits: ['onyx', 'wowza', 'eclipse']},
95
- atlas: { name: 'Atlas', date: '2018-09-07', limit: 998,
96
- traits: ['highlander', 'kittencream', 'swarley', 'topoftheworld']},
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
+ },
97
277
 
98
278
  ## August
99
- vulcant: { name: 'Vulcant', date: '2018-08-31', limit: 20, exclusive: true, ids: [932914,937360,938299,946526,948925,949058,950617,952280,952981,956374,956908,958570,964205,967234,983046,984451,990713,992861,995745,997469] },
100
- purrity: { name: 'Purrity', date: '2018-08-23', limit: 5984,
101
- traits: ['selkirk', 'chronic', 'cloudwhite', 'cheeky']},
102
- rabbidkitty: { name: 'Rabbid Kitty', date: '2018-08-23', limit: 6, exclusive: true, ids: (260..265).to_a, desc: 'Ubisoft Blockchain Heroes Hackathon' },
103
- squiddlesworth: { name: 'Squiddlesworth', date: '2018-08-16', limit: 1510, desc: 'Lava Squid Cat',
104
- traits: ['sphynx', 'redvelvet', 'patrickstarfish', 'dragontail']},
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
+ },
105
299
 
106
300
  ## July
107
- purrspero: { name: 'Purrspero', date: '2018-07-27', limit: 4448,
108
- traits: ['dippedcone', 'googly', 'royalpurple', 'beard']},
109
- catbury: { name: 'Catbury', date: '2018-07-25', limit: 76,
110
- traits: ['ragdoll', 'crazy', 'chocolate', 'mintmacaron', 'yokel', 'WE02']},
111
- honu: { name: 'Honu', date: '2018-07-20', limit: 1, exclusive: true, ids: [251], desc: 'Kitties for Good - Save Turtle Habitats' },
112
- victoire: { name: 'Victoire', date: '2018-07-18', limit: 1, exclusive: true, ids: [402], desc: 'France Football World Cup Champion' },
113
- lulu: { name: 'Lulu', date: '2018-07-13', limit: 999,
114
- traits: ['cyan', 'verdigris', 'turtleback', 'salty']},
115
- boot: { name: 'Boot', date: '2018-07-05', limit: 1440, desc: 'Football World Cup',
116
- traits: ['ganado', 'wiley', 'cerulian', 'rollercoaster'],
117
- variants: {
118
- belgium: { name: 'Belgium', limit: 97, traits: [['orangesoda','onyx']]}, ## Base Color: Orangesoda / Onyx
119
- brazil: { name: 'Brazil', limit: 195, traits: [['hintomint','bananacream','verdigris']]}, ## Base Color: Hintomint / Bananacream / Verdigris
120
- croatia: { name: 'Croatia', limit: 253, traits: [['cottoncandy','mauveover','oldlace']]}, ## Base Color: Cottoncandy / Mauveover / Oldlace
121
- england: { name: 'England', limit: 168, traits: [['greymatter','martian']]}, ## Base Color: Greymatter / Martian
122
- france: { name: 'France', limit: 317, traits: [['harbourfog','cinderella','lavender']]}, ## Base Color: Harbourfog / Cinderella / Lavender
123
- russia: { name: 'Russia', limit: 94, traits: [['shadowgrey','salmon','cloudwhite']]}, ## Base Color: Shadowgrey / Salmon/ Cloudwhite
124
- sweden: { name: 'Sweden', limit: 123, traits: [['brownies','dragonfruit','redvelvet']]}, ## Base Color: Brownies / Dragonfruit / Redvelvet
125
- uruguay: { name: 'Uruguay', limit: 193, traits: [['aquamarine','nachocheez','koala']]}, ## Base Color: Aquamarine / Nachocheez / Koala
126
- },
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',
127
341
  },
128
342
  ## note: boot - different variants for world cup teams
129
343
  ## Although there are 8 unique Fancies, they're actually each a variant on the same Fancy - Boot.
130
344
  ## Their colours are different, and you can collect all 8 as a set
131
345
 
132
346
  ## June
133
- raspoutine: { name: 'Raspoutine', date: '2018-06-28', limit: 1867,
134
- traits: ['buzzed', 'nachocheez', 'sandalwood', 'belch']},
135
- furlin: { name: 'Furlin', date: '2018-06-26', limit: 52, exclusive: true, ids: (115..126).to_a + (128..166).to_a },
136
- kittypride: { name: 'Kitty Pride', date: '2018-06-21', limit: 1316,
137
- traits: ['fabulous','cinderella','garnet']},
138
- furrmingo: { name: 'Furrmingo', date: '2018-06-14', limit: 333,
139
- traits: ['bobtail', 'egyptiankohl', 'flamingo', 'whixtensions']},
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
+ },
140
366
 
141
367
  ## May
142
- page: { name: 'Page', date: '2018-05-31', limit: 50_000,
143
- traits: ['rascal', 'peach', 'wasntme' ]},
144
- "schrödingerscat": { name: "Schrödinger's Cat", date: '2018-05-20', limit: 73,
145
- traits: ['forgetmenot','tinybox','PU20','SE25']},
146
- chatplongeur: { name: 'Chat Plongeur', date: '2018-05-19', limit: 1910,
147
- traits: ['aquamarine', 'skyblue', 'seafoam']},
148
- docpurr: { name: 'Doc Purr', date: '2018-05-16', limit: 250,
149
- traits: ['persian','spock','raisedbrow','violet','tongue']},
150
- celestialcyberdimension: { name: 'Celestial Cyber Dimension', date: '2018-05-12', limit: 1, exclusive: true, ids: [127] },
151
- swish: { name: 'Swish', date: '2018-05-08', limit: 2880,
152
- traits: ['norwegianforest', 'luckystripe', 'thicccbrowz', 'orangesoda']},
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
+ },
153
397
 
154
398
  ## April
155
- flutterbee: { name: 'Flutterbee', date: '2018-04-28', limit: 275,
156
- traits: ['cloudwhite','jaguar','lemonade','azaleablush','WE14']},
157
- vernon: { name: 'Vernon', date: '2018-04-16', limit: 320, desc: 'Spring Equinox Kitty',
158
- traits: ['amur','fabulous','cottoncandy','springcrocus','belleblue','soserious']}, ## first, see https://www.cryptokitties.co/kitty/696398
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
+ },
159
410
 
160
411
  ## March
161
- berry: { name: 'Berry', date: '2018-03-16', limit: 200,
162
- traits: ['dragonfruit','thunderstruck','emeraldgreen','apricot','simple']},
163
- pussforprogress: { name: 'Puss For Progress', date: '2018-03-08', limit: 1920, desc: "Women's Day",
164
- traits: ['himalayan','peach','safetyvest','gerbil']},
165
- fortunecat: { name: 'Fortune Cat', name_cn: '红包喵', date: '2018-03-08', limit: 888,
166
- traits: ['harbourfog','calicool','swampgreen','sapphire','beard']}, ## todo: check date for china launch specials!!!
167
- goldendragoncat: { name: 'Golden Dragon Cat', name_cn: '帝龙喵', date: '2018-03-08', limit: 1, exclusive: true, ids: [888], desc: 'China Launch' }, ## todo: check date for china launch specials!!!
168
- goldendogcat: { name: 'Golden Dog Cat', name_cn: '旺财汪', date: '2018-03-08', limit: 11, exclusive: true, ids: [1802,1803,1805,1806,1808,1809,1812,1816]+(1825..1828).to_a, desc: 'China Launch' }, ## todo: check date for china launch specials!!!
169
- liondance: { name: 'Lion Dance', name_cn: '咚咚锵', date: '2018-03-07', limit: 888, overflow: 1,
170
- traits: ['manx','royalblue','googly','starstruck']},
171
- dogcat: { name: 'Dog Cat', name_cn: '汪星爷', date: '2018-03-02', limit: 88, desc: 'Year of the Dog (Greater China)',
172
- traits: ['tigerpunk','periwinkle','barkbrown','sweetmeloncakes','yokel']},
173
- knightkitty: { name: 'Knight Kitty', date: '2018-03-01', limit: 11, exclusive: true, ids: (104..114).to_a },
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
+ },
174
453
 
175
454
  ## February
176
- tabby: { name: 'Tabby', date: '2018-02-26', limit: 250,
177
- traits: ['ragamuffin','morningglory','otaku','cheeky']},
178
- yuricatsuki: { name: 'Yuri Catsuki', date: '2018-02-20', limit: 250, desc: 'Figure Scating Kitty - Winter Olympics (Korea)',
179
- traits: ['cymric','tiger','neckbeard','elk']},
180
- misterpurrfect: { name: 'Mister Purrfect', date: '2018-02-14', limit: 1000, desc: "Valentine's Day",
181
- traits: ['chocolate','baddate','strawberry','wuvme']},
182
- earnie: { name: 'Earnie', date: '2018-02-13', limit: 500, desc: 'Earn.com - Golden Kitty Award (Product Hunt)',
183
- traits: ['birman','orangesoda','hotrod','grim']},
184
- cathena: { name: 'Cathena', date: '2018-02-06', limit: 1, exclusive: true, ids: [500000], desc: '500 000th Kitty' },
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
+ },
185
483
 
186
484
  ## January
187
- 'momo-chan': { name: 'Momo-chan', date: '2018-01-31', limit: 500, desc: 'Ninja Kitty',
188
- traits: ['onyx','henna','bloodred','wolfgrey','sass']},
189
- negato: { name: 'Negato', date: '2018-01-29', limit: 500, desc: 'Ninja Kitty',
190
- traits: ['onyx','henna','wolfgrey','slyboots']},
191
- stitches: { name: 'Stitches', date: '2018-01-10', limit: 500, desc: 'Zombie Kitty',
192
- traits: ['hintomint','seafoam','swampgreen','saycheese']},
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
+ },
193
503
 
194
504
  ## 2017
195
505
  ## December
196
- phuziqaat: { name: 'Phu Ziqaat', date: '2017-12-31', limit: 1000, desc: 'Alien Kitty',
197
- traits: ['chartreux','spock','alien','pouty']},
198
- santaclaws: { name: 'Santa Claws', date: '2017-12-12', limit: 1000, overflow: 2, desc: 'Ho Ho Ho - Santa Claus Kitty',
199
- traits: ['cloudwhite','scarlet','beard','wild_d']},
200
- mistletoe: { name: 'Mistletoe', date: '2017-12-09', limit: 2000, desc: "XMas Kitty",
201
- traits: ['oldlace','crazy','gerbil']},
202
- dracula: { name: 'Dracula', date: '2017-12-01', limit: 2000,
203
- traits: ['laperm','spock','strawberry','WE01']},
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
+ },
204
529
 
205
530
  ## November
206
- ducat: { name: 'Du Cat', date: '2017-11-29', limit: 10_000,
207
- traits: ['cymric','tongue']},
208
- genesis: { name: 'Genesis', date: '2017-11-24', limit: 1, exclusive: true, ids: [1], desc: '1st Kitty'},
209
- shipcat: { name: 'Ship Cat', date: '2017-11-23', limit: 2000,
210
- traits: ['sphynx','orangesoda','luckystripe','crazy']},
211
- bugcat: { name: 'Bug Cat', date: '2017-11-23', limit: 3, exclusive: true, ids: [101,102,103], desc: 'Bug Bounty Kitty' },
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' }
212
550
  }