kittyverse 0.2.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
  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
  }