Skip to content

Commit 999c243

Browse files
claudeS1M0N38
authored andcommitted
feat(strategy): add aggressive multiplier-focused strategy
Add a new "aggressive" strategy that prioritizes: - Aggressive early rerolling to find scaling/xMult jokers - Multiplier stacking over conservative economy - Committing hard to one hand type - Embracing high-risk options like Spectral cards - Power over safety philosophy Includes all 5 required files: - manifest.json with aggressive/multiplier/risk-taking tags - STRATEGY.md.jinja with complete aggressive playstyle guide - GAMESTATE.md.jinja (shared with default) - MEMORY.md.jinja (shared with default) - TOOLS.json (shared with default) https://claude.ai/code/session_01668Z1Lntu7kR56RPL6yX3g
1 parent 8ddad3f commit 999c243

5 files changed

Lines changed: 1082 additions & 0 deletions

File tree

Lines changed: 335 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,335 @@
1+
# Current Game State
2+
3+
{% if G.state == "SELECTING_HAND" -%}
4+
- **Phase**: Playing Phase (gamestate is SELECTING_HAND)
5+
- **Round**: {{ G.round_num }}
6+
- **Ante**: {{ G.ante_num }}/8
7+
- **Money**: ${{ G.money }}
8+
- **Hands left**: {{ G.round.hands_left }}/{{ G.round.hands_left + G.round.hands_played }}
9+
- **Discards left**: {{ G.round.discards_left }}/{{ G.round.discards_left + G.round.discards_used }}
10+
- **Current Blind**: {% if G.blinds.small.status == "CURRENT" %}Small{% elif G.blinds.big.status == "CURRENT" %}Big{% elif G.blinds.boss.status == "CURRENT" %}Boss ({{ G.blinds.boss.name }}: {{ G.blinds.boss.effect }}){% endif %}
11+
- **Target Score**: {% if G.blinds.small.status == "CURRENT" %}{{ G.blinds.small.score }}{% elif G.blinds.big.status == "CURRENT" %}{{ G.blinds.big.score }}{% elif G.blinds.boss.status == "CURRENT" %}{{ G.blinds.boss.score }}{% endif %}
12+
- **Current Score**: {{ G.round.chips }}
13+
{%- elif G.state == "SHOP" %}
14+
- **Phase**: Shop Phase (gamestate is SHOP)
15+
- **Round**: {{ G.round_num }}
16+
- **Ante**: {{ G.ante_num }}/8
17+
- **Money**: ${{ G.money }}
18+
{%- elif G.state == "BLIND_SELECT" %}
19+
- **Phase**: Blind Selection (gamestate is BLIND_SELECT)
20+
- **Round**: {{ G.round_num }}
21+
- **Ante**: {{ G.ante_num }}/8
22+
- **Money**: ${{ G.money }}
23+
{%- endif %}
24+
- **Deck**: {{ G.deck }}
25+
- **Stake**: {{ G.stake }}
26+
{% if G.seed %}- **Seed**: {{ G.seed }}{% endif %}
27+
28+
## Jokers
29+
30+
The current Jokers count is {{ G.jokers.count }}/{{ G.jokers.limit }}.
31+
{% for j in G.jokers.cards -%}
32+
{% if not j.state.hidden %}
33+
- {{ loop.index0 }}: {{ j.label }} ({{ j.value.effect }})
34+
- **Sell value**: ${{ j.cost.sell }}
35+
{%- if j.modifier.edition %}
36+
- **{{ j.modifier.edition }} Edition**
37+
{%- endif %}
38+
{%- if j.modifier.eternal %}
39+
- **Eternal**: cannot be sold or destroyed
40+
{%- endif %}
41+
{%- if j.modifier.perishable %}
42+
- **Perishable**: {{ j.modifier.perishable }} rounds remaining
43+
{%- endif %}
44+
{%- if j.modifier.rental %}
45+
- **Rental**: costs $1 per round
46+
{%- endif %}
47+
{%- if j.state.debuff %}
48+
- **Debuff**: this joker is debuffed so its effect is disabled
49+
{%- endif %}
50+
{%- else %}
51+
- {{ loop.index0 }}: the joker is face down
52+
{%- endif %}
53+
{%- endfor %}
54+
55+
## Consumables
56+
57+
The current Consumables count is {{ G.consumables.count }}/{{ G.consumables.limit }}.
58+
{% for c in G.consumables.cards -%}
59+
{% if not c.state.hidden %}
60+
- {{ loop.index0 }}: {{ c.label }} ({{ c.value.effect }})
61+
- **Sell value**: ${{ c.cost.sell }}
62+
{%- if c.modifier.edition %}
63+
- **{{ c.modifier.edition }} Edition**
64+
{%- endif %}
65+
{%- if c.state.debuff %}
66+
- **Debuff**: this consumable is debuffed so its effect is disabled
67+
{%- endif %}
68+
{%- else %}
69+
- {{ loop.index0 }}: the consumable is face down
70+
{%- endif %}
71+
{%- endfor %}
72+
73+
{% if G.used_vouchers|length > 0 -%}
74+
## Vouchers
75+
76+
Here is the list of vouchers redeemed during the run:
77+
78+
{% for name, effect in G.used_vouchers.items() -%}
79+
- {{ name }}: {{ effect }}
80+
{% endfor -%}
81+
{% endif -%}
82+
83+
## Poker Hands
84+
85+
Here is a list of the poker hands and their levels:
86+
87+
{% for name, hand in G.hands.items() -%}
88+
- **{{ name }}** (Level {{ hand.level }}):
89+
- **Chips**: {{ hand.chips }}
90+
- **Mult**: {{ hand.mult }}
91+
- **Example**: `{% for c in hand.example %}{{ c[0] }}{% if not c[1] %} (not scored){% endif %}{% if not loop.last %}, {% endif %}{% endfor %}`
92+
- During this run you have played {{ name }} {{ hand.played }} times, {{ hand.played_this_round }} of which were played this round.
93+
{% endfor %}
94+
95+
{% if G.state == "SELECTING_HAND" -%}
96+
## Current Hand
97+
98+
The current card count is {{ G.hand.count }} / {{ G.hand.limit }}
99+
**CRITICAL LIMIT: You can play or discard MAXIMUM {{ G.hand.highlighted_limit }} cards per action - NEVER MORE THAN {{ G.hand.highlighted_limit }} CARDS (this is an absolute game rule).**
100+
101+
{% for c in G.hand.cards %}
102+
{%- if not c.state.hidden %}
103+
{%- if c.modifier.enhancement == "STONE" %}
104+
- {{ loop.index0 }}: this is a stone card (no suit and no rank)
105+
{%- else %}
106+
- {{ loop.index0 }}: {{ c.value.rank }} of {{ c.value.suit }} (`{{ c.key }}`)
107+
{%- if c.modifier.edition %}
108+
- **{{ c.modifier.edition }} Edition**
109+
{%- endif %}
110+
{%- if c.modifier.enhancement %}
111+
- **{{ c.modifier.enhancement }} Enhancement**
112+
{%- endif %}
113+
{%- if c.modifier.seal %}
114+
- **{{ c.modifier.seal }} Seal**
115+
{%- endif %}
116+
{%- if c.state.debuff %}
117+
- **Debuff**: this card is debuffed and will not be counted in scoring
118+
{%- endif %}
119+
{%- endif %}
120+
{%- else %}
121+
- {{ loop.index0 }}: the card is face down
122+
{%- endif %}
123+
{%- endfor %}
124+
{%- endif %}
125+
126+
{% if G.state == "SHOP" -%}
127+
## Shop
128+
129+
Here are the available cards in the shop:
130+
131+
{% for card in G.shop.cards -%}
132+
{% if not card.state.hidden %}
133+
{%- if card.set == "JOKER" %}
134+
- {{ loop.index0 }}: {{ card.label }} ({{ card.value.effect }})
135+
- **Set**: Joker
136+
- **Cost**: ${{ card.cost.buy }}
137+
- **Sell value**: ${{ card.cost.sell }}
138+
{%- if card.modifier.edition %}
139+
- **{{ card.modifier.edition }} Edition**
140+
{%- endif %}
141+
{%- if card.state.debuff %}
142+
- **Debuff**: this card is debuffed
143+
{%- endif %}
144+
{%- elif card.set in ["TAROT", "PLANET", "SPECTRAL"] %}
145+
- {{ loop.index0 }}: {{ card.label }} ({{ card.value.effect }})
146+
- **Set**: {{ card.set|title }}
147+
- **Cost**: ${{ card.cost.buy }}
148+
- **Sell value**: ${{ card.cost.sell }}
149+
{%- if card.state.debuff %}
150+
- **Debuff**: this card is debuffed
151+
{%- endif %}
152+
{%- elif card.set in ["DEFAULT", "ENHANCED"] %}
153+
{%- if card.modifier.enhancement == "STONE" %}
154+
- {{ loop.index0 }}: this is a stone card (no suit and no rank)
155+
- **Set**: Playing Card
156+
- **Cost**: ${{ card.cost.buy }}
157+
- **Sell value**: ${{ card.cost.sell }}
158+
{%- else %}
159+
- {{ loop.index0 }}: {{ card.value.rank }} of {{ card.value.suit }} (`{{ card.key }}`)
160+
- **Set**: Playing Card
161+
- **Cost**: ${{ card.cost.buy }}
162+
- **Sell value**: ${{ card.cost.sell }}
163+
{%- if card.modifier.edition %}
164+
- **{{ card.modifier.edition }} Edition**
165+
{%- endif %}
166+
{%- if card.modifier.enhancement %}
167+
- **{{ card.modifier.enhancement }} Enhancement**
168+
{%- endif %}
169+
{%- if card.modifier.seal %}
170+
- **{{ card.modifier.seal }} Seal**
171+
{%- endif %}
172+
{%- if card.state.debuff %}
173+
- **Debuff**: this card is debuffed
174+
{%- endif %}
175+
{%- endif %}
176+
{%- endif %}
177+
{%- else %}
178+
- {{ loop.index0 }}: the card is face down
179+
{%- endif %}
180+
{%- endfor %}
181+
182+
The cost of the reroll is ${{ G.round.reroll_cost }}.
183+
184+
{% if G.vouchers.cards %}
185+
Here are the vouchers that can be redeemed:
186+
{% for voucher in G.vouchers.cards -%}
187+
{%- if not voucher.state.hidden %}
188+
- {{ loop.index0 }}: {{ voucher.label }} ({{ voucher.value.effect }})
189+
- **Cost**: ${{ voucher.cost.buy }}
190+
{%- else %}
191+
- {{ loop.index0 }}: the voucher is face down
192+
{%- endif %}
193+
{%- endfor %}
194+
{% endif %}
195+
196+
{% if G.packs.cards %}
197+
### Booster Packs
198+
199+
{% for pack in G.packs.cards -%}
200+
- {{ loop.index0 }}: **{{ pack.label }}**
201+
- **Effect**: {{ pack.value.effect }}
202+
- **Cost**: ${{ pack.cost.buy }}
203+
{% endfor %}
204+
{% endif %}
205+
{%- endif %}
206+
207+
{% if G.state == "SMODS_BOOSTER_OPENED" -%}
208+
## Pack Selection
209+
210+
You have opened a booster pack. Choose a card or skip.
211+
212+
### Available Cards in Pack
213+
214+
{% for card in G.pack.cards -%}
215+
{% if card.set == "JOKER" %}
216+
- {{ loop.index0 }}: **{{ card.label }}** (Joker)
217+
- **Effect**: {{ card.value.effect }}
218+
- **Rarity**: {{ card.value.rarity|default('Common') }}
219+
{% elif card.set in ["TAROT", "PLANET", "SPECTRAL"] %}
220+
- {{ loop.index0 }}: **{{ card.label }}** ({{ card.set|title }})
221+
- **Effect**: {{ card.value.effect }}
222+
{% if card.value.min_highlighted %} - **Targets**: {{ card.value.min_highlighted }}-{{ card.value.max_highlighted }} hand cards{% endif %}
223+
{% elif card.set in ["DEFAULT", "ENHANCED"] %}
224+
- {{ loop.index0 }}: **{{ card.value.rank }} of {{ card.value.suit }}**
225+
{% if card.set == "ENHANCED" %} - **Enhancement**: {{ card.value.enhancement }}{% endif %}
226+
{% if card.value.edition %} - **Edition**: {{ card.value.edition }}{% endif %}
227+
{% if card.value.seal %} - **Seal**: {{ card.value.seal }}{% endif %}
228+
{% endif %}
229+
{%- endfor %}
230+
231+
{% if G.hand and G.hand.cards %}
232+
### Your Hand (for targeting)
233+
234+
{% for card in G.hand.cards -%}
235+
- {{ loop.index0 }}: {{ card.value.rank }} of {{ card.value.suit }}{% if card.set == "ENHANCED" %} ({{ card.value.enhancement }}){% endif %}
236+
{% endfor %}
237+
{% endif %}
238+
{%- endif %}
239+
240+
{% if G.state == "BLIND_SELECT" -%}
241+
## Blind Selection
242+
243+
### Small Blind
244+
- **Status**: {{ G.blinds.small.status }}
245+
- **Score**: {{ G.blinds.small.score }}
246+
{% if G.blinds.small.tag_name %}- **Tag**: {{ G.blinds.small.tag_name }}{% if G.blinds.small.tag_effect %} - {{ G.blinds.small.tag_effect }}{% endif %}{% endif %}
247+
248+
### Big Blind
249+
- **Status**: {{ G.blinds.big.status }}
250+
- **Score**: {{ G.blinds.big.score }}
251+
{% if G.blinds.big.tag_name %}- **Tag**: {{ G.blinds.big.tag_name }}{% if G.blinds.big.tag_effect %} - {{ G.blinds.big.tag_effect }}{% endif %}{% endif %}
252+
253+
### Boss Blind
254+
- **Name**: {{ G.blinds.boss.name }}
255+
- **Status**: {{ G.blinds.boss.status }}
256+
- **Score**: {{ G.blinds.boss.score }}
257+
{% if G.blinds.boss.effect %}- **Effect**: {{ G.blinds.boss.effect }}{% endif %}
258+
{%- endif %}
259+
260+
# Tools available
261+
262+
You **MUST** use one of the following tools to perform the intended action:
263+
264+
{% if G.state == "SELECTING_HAND" -%}
265+
- Play cards from hand
266+
- Function: `play`
267+
- Parameters:
268+
- `cards`: (list) 0-based indices of cards to play (1-5 cards)
269+
- `reasoning`: (string) Strategic reasoning for playing these cards
270+
- Discard cards from hand
271+
- Function: `discard`
272+
- Parameters:
273+
- `cards`: (list) 0-based indices of cards to discard
274+
- `reasoning`: (string) Strategic reasoning for discarding these cards
275+
- Rearrange cards in hand, jokers, or consumables
276+
- Function: `rearrange`
277+
- Parameters (provide exactly one of):
278+
- `hand`: (list) New order of hand cards (0-based indices, must include all cards)
279+
- `jokers`: (list) New order of jokers (0-based indices, must include all jokers)
280+
- `consumables`: (list) New order of consumables (0-based indices, must include all consumables)
281+
- `reasoning`: (string) Strategic reasoning for this arrangement
282+
{% elif G.state == "SHOP" -%}
283+
- Buy a card, voucher, or pack from the shop
284+
- Function: `buy`
285+
- Parameters (provide exactly one of):
286+
- `card`: (integer) 0-based index of shop card to buy
287+
- `voucher`: (integer) 0-based index of voucher to buy
288+
- `pack`: (integer) 0-based index of booster pack to buy and open
289+
- `reasoning`: (string) Strategic reasoning for this purchase
290+
- Reroll the shop items
291+
- Function: `reroll`
292+
- Parameters:
293+
- `reasoning`: (string) Strategic reasoning for rerolling
294+
- Leave the shop and advance to blind selection
295+
- Function: `next_round`
296+
- Parameters:
297+
- `reasoning`: (string) Strategic reasoning for leaving the shop
298+
- Rearrange jokers or consumables
299+
- Function: `rearrange`
300+
- Parameters (provide exactly one of):
301+
- `jokers`: (list) New order of jokers (0-based indices, must include all jokers)
302+
- `consumables`: (list) New order of consumables (0-based indices, must include all consumables)
303+
- `reasoning`: (string) Strategic reasoning for this arrangement
304+
{% elif G.state == "BLIND_SELECT" -%}
305+
- Select the current blind to play
306+
- Function: `select`
307+
- Parameters:
308+
- `reasoning`: (string) Strategic reasoning for selecting this blind
309+
- Skip the current blind (small or big blind only) to receive the tag reward
310+
- Function: `skip`
311+
- Parameters:
312+
- `reasoning`: (string) Strategic reasoning for skipping this blind
313+
{% elif G.state == "SMODS_BOOSTER_OPENED" -%}
314+
- Select a card from the pack or skip
315+
- Function: `pack`
316+
- Parameters:
317+
- `card`: (integer, optional) 0-based index of card to select (omit if skipping)
318+
- `targets`: (list, optional) 0-based indices of hand cards to target (for Tarot/Spectral that require selection)
319+
- `skip`: (boolean, optional) Set to true to skip the pack without selecting a card
320+
- `reasoning`: (string) Strategic reasoning for this selection or skip
321+
{% endif -%}
322+
{% if G.state in ["SELECTING_HAND", "SHOP"] -%}
323+
- Sell a joker or consumable for money
324+
- Function: `sell`
325+
- Parameters (provide exactly one of):
326+
- `joker`: (integer) 0-based index of joker to sell
327+
- `consumable`: (integer) 0-based index of consumable to sell
328+
- `reasoning`: (string) Strategic reasoning for selling
329+
- Use a consumable card (Tarot, Planet, or Spectral)
330+
- Function: `use`
331+
- Parameters:
332+
- `consumable`: (integer) 0-based index of consumable to use
333+
- `cards`: (list) 0-based indices of cards to target (required for some consumables)
334+
- `reasoning`: (string) Strategic reasoning for using this consumable
335+
{% endif -%}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Memory & Previous Actions
2+
3+
{% if history %}
4+
## Recent Decision History
5+
6+
Here is a list of your recent decisions (from oldest to newest):
7+
{% set max_history = 10 if history|length > 10 else history|length %}
8+
{% for entry in history[-max_history:] %}
9+
**{{ loop.index }}.** `{{ entry.method }}({{ entry.params }})` - {{ entry.reasoning }}
10+
{% endfor %}
11+
{% endif %}
12+
13+
## Strategic Context
14+
{% if history %}
15+
Based on your recent actions, consider:
16+
- How your decisions are building towards a cohesive strategy
17+
- Whether your current approach is working or needs adjustment
18+
- Patterns in your play that might need to change
19+
{% else %}
20+
This is the beginning of the game. Focus on:
21+
- Establishing a clear strategic direction
22+
- Making decisions that set up long-term synergies
23+
- Building towards a specific poker hand type
24+
{% endif %}
25+
26+
{% if last_error_call_msg %}
27+
**NOTE**: **Your last response was invalid**: {{ last_error_call_msg }}
28+
Please ensure your next response includes a proper tool call with valid function name and JSON arguments.
29+
{% endif %}
30+
31+
{% if last_failed_call_msg %}
32+
**NOTE**: **Your last tool call failed**: {{ last_failed_call_msg }}
33+
The tool call was formatted correctly but execution failed. Please try a different approach.
34+
{% endif %}

0 commit comments

Comments
 (0)