Mainkan 2 lawan 2 dan 3 lawan 3: mode tim
Bentuk tim bersama teman, gabungkan properti kalian, dan menang bersama — opolyx kini punya permainan tim 2×2 dan 3×3.

Dengan bahasa sederhana
Beberapa permainan lebih seru dengan pasangan. Mode tim mengadu dua kubu — 2 lawan 2 dalam permainan empat pemain atau 3 lawan 3 dalam permainan enam pemain — sehingga kamu dan teman-temanmu bermain untuk satu warna, bukan sekadar untuk diri sendiri.
Berada di kubu yang sama mengubah segalanya dalam cara kalian bermain bersama. Rekan setimmu adalah sekutu, bukan lawan, jadi papan pun terbuka lebar:
- Mendarat di properti rekan setim, kamu tidak membayar apa pun — sewa hanya pernah dikenakan pada tim lawan.
- Oper uang dan properti antar rekan setim dengan bebas — tidak ada aturan 50%, jadi kamu bisa langsung memberi rekan yang sedang kesulitan apa pun yang dia butuhkan.
- Jika seorang rekan setim bangkrut, seluruh hartanya jatuh ke tanganmu, bukan ke bank — sebuah tim baru tersingkir ketika setiap anggotanya telah gugur.
- Kalian menang sebagai tim: kubu terakhir yang bertahan, atau kubu terkaya saat batas ronde tercapai — dan kedua rekan setim mendapat hadiah kemenangan (XP dan sebuah kartu).
Selaraskan pertukaran kalian, saling melindungi, dan desak tim lawan keluar dari papan bersama-sama. Ini opolyx yang sama seperti yang kamu kenal — dengan pasangan di sisimu.
Untuk yang ingin tahu teknisnya
Mode tim adalah perangkat aturan Classic dengan satu konsep baru per pemain: tim. Engine menambahkan satu field PlayerState.team dan segelintir selektor (sameTeam, teamOf, aliveTeams, teamNetWorth) yang dibaca aturan: computeRent membebaskan rekan setim, doProposeTrade melewati aturan 50% di antara mereka, dan eliminasi mengarahkan harta ke rekan setim hidup dengan slot terendah alih-alih ke bank. Kondisi akhir dievaluasi per tim — tim terakhir yang bertahan, atau tim terkaya saat batas ronde tercapai.
Tiga migrasi mewujudkannya. Postgres melarang penggunaan nilai enum baru dalam transaksi yang sama yang menambahkannya, jadi 0028 meng-commit game_mode tim secara tersendiri; lalu 0029 membuat create_game menerimanya (dengan pemeriksaan roster yang penuh dan seimbang) serta menambahkan award_game_winners untuk hadiah banyak pemenang; dan 0030 menambahkan kolom team yang bisa dipilih beserta RPC ruang tunggunya.
-- 0028_team_mode_enum.sql — its own migration (see above)
alter type game_mode add value 'team';
-- 0030_team_picker.sql — pickable side; NULL = slot-parity default (slot % 2)
alter table game_players
add column team smallint check (team is null or team in (0, 1));
-- SECURITY DEFINER lobby write (RLS has no user write on game_players):
-- a player sets their own seat; the creator may set any seat (to arrange bots).
create function set_player_team(p_game uuid, p_slot int, p_team smallint)
returns void language plpgsql security definer as $$ ... $$;Tidak diperlukan perubahan enum event_kind — data tim menumpang pada field payload opsional di event yang sudah ada (game_started.players[].team, player_eliminated.inheritedBySlot, game_finished.winnerTeam). Tim yang dipilih (bukan paritas) dirangkai ke dalam initializeGame; daemon menolak memulai permainan tim yang rosternya tidak penuh (team_roster_not_full) atau tidak seimbang (team_not_balanced). Tes Engine 214 / daemon 82 hijau, dan properti terminasi fast-check kini menggiring permainan 2×2 dan 3×3 hingga selesai.
