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 +4 -4
- data/Manifest.txt +3 -0
- data/README.md +110 -19
- data/lib/kittyverse.rb +22 -5
- data/lib/kittyverse/catalog.rb +9 -15
- data/lib/kittyverse/cattributes.rb +116 -0
- data/lib/kittyverse/fancies.rb +489 -151
- data/lib/kittyverse/purrstige.rb +200 -0
- data/lib/kittyverse/traits.rb +9 -9
- data/lib/kittyverse/version.rb +1 -1
- data/test/test_cattributes.rb +56 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b83f8ccd15b5d6499f12627e7a8bb1261b33176b
|
4
|
+
data.tar.gz: 9086b03449228f510ac73ee7198fe9264744a93c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2bcfa16de3bb45b077bbfff8d503e87a7f28de68d55a2b1257b4540eb91ac5f28a88fceb94b814b7167b5b4a7aeb1812628fd33200ce81ae785fa90507c8f8c1
|
7
|
+
data.tar.gz: 22938b98bdd3bfb741033537516d28dff5f5b0e527571600c5016514e1969f7422fafa81885a9bcc0a5ae3823a918c681377ae5fc2daec0970784e08d8149fac
|
data/Manifest.txt
CHANGED
@@ -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
|
-
|
50
|
-
p
|
51
|
-
p
|
52
|
-
p
|
53
|
-
p
|
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
|
-
|
58
|
-
|
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
|
-
|
145
|
+
### Reference Pages / Cheat Sheets
|
67
146
|
|
147
|
+
Auto-generated CryptoKitties reference pages / cheat sheets include:
|
68
148
|
|
69
|
-
|
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
|
-
|
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.
|
data/lib/kittyverse.rb
CHANGED
@@ -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
|
-
'
|
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
|
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
|
data/lib/kittyverse/catalog.rb
CHANGED
@@ -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
|
-
@@
|
7
|
-
@@exclusives
|
8
|
-
@@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.
|
15
|
-
def self.exclusives()
|
16
|
-
def self.fancies()
|
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[:
|
24
|
-
|
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
|
data/lib/kittyverse/fancies.rb
CHANGED
@@ -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
|
-
|
22
|
-
##
|
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',
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
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',
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
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
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
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
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
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',
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
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',
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
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',
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
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',
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
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',
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
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',
|
156
|
-
|
157
|
-
|
158
|
-
|
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',
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
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',
|
177
|
-
|
178
|
-
|
179
|
-
traits: ['
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
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',
|
188
|
-
|
189
|
-
|
190
|
-
traits: ['onyx','henna','wolfgrey','
|
191
|
-
|
192
|
-
|
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',
|
197
|
-
|
198
|
-
|
199
|
-
traits: ['
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
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',
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
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
|
}
|