Pohon BBS Anonymous https://bbs.gikopoi.com/thread/1716427555 2025-06-08T19:47:24+00:00 Trails In Sky Combat Emu - Procedural https://bbs.gikopoi.com/thread/1747949301 2025-05-22T21:28:21+00:00 2025-06-08T19:47:24+00:00 #!/usr/bin/env python3<br>"""<br>Trails in the Sky - Procedural Combat Timeline Engine with Persistent Event Labels<br>"""<br>import os<br>import sys<br>import time<br>import random<br><br># === EVENT TYPES ===<br>TYPE_CHARACTER = 0 # Player character taking action<br>TYPE_ENEMY = 1 # Enemy AI taking action<br>TYPE_SPELL_RESOLVE = 2 # Spell resolves after cast delay<br>TYPE_STATUS_EXPIRE = 4 # Status effect ends<br>TYPE_PLAYER_INPUT = 5 # Wait for player input before proceeding<br><br># === STATUS EFFECTS COLORS ===<br>STATUS_COLORS = {<br> "Casting": "\033[37m", # Light grey / off-white<br> "Poisoned": "\033[95m", # Purple<br> "Burning": "\033[91m", # Red<br> "Slowed": "\033[94m", # Blue<br> "Haste": "\033[92m", # Green<br> "Muted": "\033[93m", # Yellow<br> "Dead": "\033[90m" # Gray<br>}<br>RESET_COLOR = "\033[0m"<br><br># === LABEL POOL (1-9,a-z,A-Z) ===<br>label_pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"<br>label_counter = 0<br><br>def get_label():<br> """Get next label in the cyclic pool"""<br> global label_counter<br> label = label_pool[label_counter % len(label_pool)]<br> label_counter += 1<br> return label<br><br># === DATA STRUCTURES ===<br>def create_character(name, hp, ep, cp, atk, defense, speed, mov, is_player=False):<br> """Create a new character dictionary with persistent label"""<br> return {<br> 'name': name,<br> 'hp': hp,<br> 'max_hp': hp,<br> 'ep': ep,<br> 'cp': cp,<br> 'atk': atk,<br> 'defense': defense,<br> 'speed': speed,<br> 'mov': mov,<br> 'is_player': is_player,<br> 'alive': True,<br> 'status_effects': [],<br> 'next_action_time': 0,<br> 'orbment': [4, 2, 0, 1, 1, 0, 0], # Fire, Water, Earth, Wind, Time, Space, Mirage<br> 'label': get_label()<br> }<br><br>def create_spell_resolve_event(caster_id, target_id, spell_name, resolve_time):<br> """Create a spell resolve event with persistent label"""<br> return {<br> 'name': f"{spell_name} ({caster_id}→{target_id})",<br> 'next_action_time': resolve_time,<br> 'caster_id': caster_id,<br> 'target_id': target_id,<br> 'spell_name': spell_name,<br> 'type': TYPE_SPELL_RESOLVE,<br> 'label': get_label()<br> }<br><br>def create_status_expire_event(target_id, effect_name, expire_time):<br> """Create a status expiration event with persistent label"""<br> return {<br> 'name': f"{effect_name} expires",<br> 'next_action_time': expire_time,<br> 'target_id': target_id,<br> 'effect_name': effect_name,<br> 'type': TYPE_STATUS_EXPIRE,<br> 'label': get_label()<br> }<br><br># === UTILITY FUNCTIONS ===<br>def get_terminal_size():<br> try:<br> return os.get_terminal_size()<br> except:<br> return type('obj', (object,), {'columns': 80, 'lines': 24})<br><br>def clear_screen():<br> os.system('cls' if os.name == 'nt' else 'clear')<br><br>def format_time(time_val):<br> return f"{time_val:08d}"<br><br>def is_valid_participant(p):<br> """Check if participant should be displayed on timeline"""<br> if isinstance(p, dict):<br> if p.get('type') == TYPE_STATUS_EXPIRE:<br> return p['next_action_time'] > global_time<br> return p.get('alive', True) or p.get('type') in [TYPE_SPELL_RESOLVE]<br> return False<br><br>def get_status_color_for(event):<br> """Determine color based on spell name, status expiration, or character status"""<br> if isinstance(event, dict):<br> # Spell Resolve: check spell name<br> if event.get('type') == TYPE_SPELL_RESOLVE:<br> if event['spell_name'] == "Burn":<br> return STATUS_COLORS["Burning"]<br> elif event['spell_name'] == "Poison":<br> return STATUS_COLORS["Poisoned"]<br> elif event['spell_name'] == "Heal":<br> return STATUS_COLORS["Haste"]<br><br> # Status Expire: use the status name<br> elif event.get('type') == TYPE_STATUS_EXPIRE:<br> effect_name = event.get('effect_name', '')<br> return STATUS_COLORS.get(effect_name, "")<br><br> # Character: check their status effects<br> elif 'status_effects' in event:<br> for se in event['status_effects']:<br> if se['name'] in STATUS_COLORS:<br> return STATUS_COLORS[se['name']]<br> return ""<br><br># === STATUS EFFECTS ===<br>def apply_status_effect(target, effect_name, duration, on_apply=None, on_tick=None, on_expire=None):<br> """Apply a status effect to a target character"""<br> existing = None<br> for se in target['status_effects']:<br> if se['name'] == effect_name:<br> existing = se<br> break<br> if existing:<br> if existing['duration'] > 0:<br> existing['duration'] = max(existing['duration'], duration)<br> return<br> # Add the effect to the target's status list<br> new_effect = {<br> 'name': effect_name,<br> 'duration': duration,<br> 'on_apply': on_apply,<br> 'on_tick': on_tick,<br> 'on_expire': on_expire<br> }<br> target['status_effects'].append(new_effect)<br> # Call apply function if it exists<br> if new_effect['on_apply']:<br> new_effect['on_apply'](target)<br> # Create expiration event<br> if new_effect['duration'] > 0:<br> expire_event = create_status_expire_event(<br> id(target),<br> effect_name,<br> global_time + new_effect['duration']<br> )<br> participants.append(expire_event)<br><br>def tick_status_effects(characters, global_time):<br> """Tick all active status effects"""<br> for char in characters:<br> if not char['alive']:<br> continue<br> for effect in list(char['status_effects']):<br> effect['duration'] -= 1<br> if effect['on_tick']:<br> effect['on_tick'](char)<br> if effect['duration'] <= 0:<br> if effect['on_expire']:<br> effect['on_expire'](char)<br> char['status_effects'].remove(effect)<br><br># === SPELL SYSTEM ===<br>def cast_burn_spell(caster, target, resolve_time):<br> message = f"{caster['name']} casts Burn on {target['name']}!"<br> print(message.rjust(31))<br> damage = int(caster['atk'] * 1.5)<br> target['hp'] = max(0, target['hp'] - damage)<br> if target['hp'] == 0:<br> print(f"{target['name']} collapses!")<br> target['alive'] = False<br><br> # Remove Casting status<br> caster['status_effects'] = [se for se in caster['status_effects'] if se['name'] != 'Casting']<br><br> # Apply burn effect (30 AT duration)<br> apply_status_effect(<br> target,<br> "Burning",<br> 30,<br> on_apply=lambda t: print(f"{t['name']} catches fire!"),<br> on_tick=lambda t: t.update({'hp': max(0, t['hp'] - 1)}),<br> on_expire=lambda t: print(f"{t['name']} is no longer burning.")<br> )<br><br>def cast_poison_spell(caster, target, resolve_time):<br> print(f"{caster['name']} casts Poison on {target['name']}!")<br> damage = int(caster['atk'] * 1.5)<br> target['hp'] = max(0, target['hp'] - damage)<br> if target['hp'] == 0:<br> print(f"{target['name']} collapses!")<br> target['alive'] = False<br><br> # Remove Casting status<br> caster['status_effects'] = [se for se in caster['status_effects'] if se['name'] != 'Casting']<br><br> # Apply poison effect (20 AT duration)<br> apply_status_effect(<br> target,<br> "Poisoned",<br> 20,<br> on_apply=lambda t: print(f"{t['name']} is poisoned!"),<br> on_tick=lambda t: t.update({'hp': max(0, t['hp'] - 1)}),<br> on_expire=lambda t: print(f"{t['name']} is no longer poisoned.")<br> )<br><br>def cast_heal_spell(caster, target, resolve_time):<br> print(f"{caster['name']} casts Heal on {target['name']}!")<br> target['hp'] = min(target['max_hp'], target['hp'] + 50)<br> print(f"{target['name']} healed to {target['hp']}/{target['max_hp']}")<br><br> # Remove Casting status<br> caster['status_effects'] = [se for se in caster['status_effects'] if se['name'] != 'Casting']<br><br># === COMBAT ACTIONS ===<br>def handle_player_turn(actor, enemies, participants, global_time):<br> """Handle a player's turn"""<br> print(f"\n{actor['name']}'s Turn:")<br> print("A: Attack | B: Cast Burn | P: Cast Poison | H: Heal | R: Run")<br> choice = input("Choose action: ").strip().lower()<br><br> targets = [e for e in enemies if e['alive']]<br> if not targets:<br> print("No enemies alive.")<br> return<br><br> if choice == 'a':<br> target = select_target_from_list(targets)<br> if target:<br> print(f"{ Handheld games https://bbs.gikopoi.com/thread/1748742271 2025-06-01T01:44:31+00:00 2025-06-02T18:45:21+00:00 Got any portable console recs?<br>GBA/DS/PSP etc.<br>Posting from DSi Browser. Giko Chess Games https://bbs.gikopoi.com/thread/1738863100 2025-02-06T17:31:40+00:00 2025-05-04T00:52:47+00:00 Archduke vs Akai<br>2025-02-06, 17:20<br><br>1.e4 e5<br>2.Nb1c3 Ng8f6<br>3.Bf1c4 Qd8e7<br>4.d3 c6<br>5.Bc1g5 d5<br>6.Bg5xf6 Qe7xf6<br>7.exd5 b5<br>8.dxc6 bxc4<br>9.c7 Nb8c6<br>10.d4 Nc6xd4<br>11.Nc3d5 Qf6c6<br>12.Qd1h5 Nd4xc2<br>13.Ke1d2 Nc2xa1<br>14.Qh5xe5 Qc6e6<br>15.Ng1f3 Qe6xe5<br>16.Nf3xe5 Bf8d6<br>17.Ne5c6 Bc8a6<br>18.Rh1e1 Ke8d7<br>19.Nc6b4 Bd6xb4<br>20.Nd5c3 Shin Megami Tensei TTRPG https://bbs.gikopoi.com/thread/1745606785 2025-04-25T18:46:25+00:00 2025-04-26T03:19:26+00:00 We need to play this on Giko<br><br>Rules PDF: https://files.catbox.moe/5l9e6r.pdf MINE CRAFT https://bbs.gikopoi.com/thread/1738024682 2025-01-28T00:38:02+00:00 2025-04-11T19:57:47+00:00 MINE CRAFT IS FUN<br>my taijitu garden in a1.2.6<br>https://booru.gikopoi.com/post/view/225<br>https://booru.gikopoi.com/post/view/226<br>https://booru.gikopoi.com/post/view/227 The Giko Backgammon Tournament https://bbs.gikopoi.com/thread/1742754978 2025-03-23T18:36:18+00:00 2025-03-24T09:32:29+00:00 Just a fun idea I had. We should collect a list of interested parties <br>for an April tournament, best of 10 (permitting use of doubling cube)<br>per match, maybe with a $5 buy-in per person <br><br>(winner gets 90% of funds, 10% of money goes toward paying VPS bill)<br><br>Playing for nothing is also fine but $5 feels like enough to stake <br>that the games would be a little more interesting but nothing to get<br>upset over. <br><br>Best of 10 may sound like a lot but incorporating the doubling cube,<br>1 game becomes 2 becomes 4 becomes 8 potentially very quickly... playing<br>with a small number of games per "match" gives RNG an advantage over <br>skill, which is something to be avoided FOSS Games https://bbs.gikopoi.com/thread/1705095924 2024-01-12T21:45:24+00:00 2024-07-19T23:12:06+00:00 what is your favorite foss game? cataclysm:dda is pretty good. Playing poker https://bbs.gikopoi.com/thread/1720976773 2024-07-14T17:06:13+00:00 2024-07-14T17:06:13+00:00 How do you like playing poker? <br><br>Me, my favorite is Omaha Hold'Em or 5 card draw. My friends like Texas<br>Hold Em though. The only poker they knew of was Texas Hold Em. It's <br>not a bad game, but I think introducing more variants could be fun --<br>we currently go for "dealer's choice" in our games. <br><br>If you have any variant ideas... would love to hear them... trying a<br>few hands of the original 4 player, 20 card poker could be fun too, <br>maybe I'm being unrealistic. <br><br>We usually start with 40-50 "points" per player. This can last quite a<br>while. Betting rules are pretty minimal -- you can't raise in a round<br>if you previously checked or called, and you can't re-raise if you<br>raised and no one else raises. We don't have any betting minimums or<br>maximums in play but pot-limit may be a good approach if anyone, err,<br>plays against the vibe. We tend to double the blinds every 15 minutes or<br>so to help speed things along. <br><br>It would be great to play poker with other gikos sometime, whether for<br>money (gikocoins?) or prestige. Gikopoi Election 2024 https://bbs.gikopoi.com/thread/1716434645 2024-05-23T03:24:05+00:00 2024-06-27T03:11:35+00:00 The year is 2024 and the Gikopoi Election is underway again. <br><br>---------------------<br>Year-Month-Day scheduled events<br>---------------------<br>2024-07-06 -- First debate, speeches / presentations <br>2024-09-08 -- Second debate, speeches / presentations <br>2024-11-05 -- Final election day<br>---------------------<br><br>If you would like to run as candidate, post a reply to this thread<br>with your Gikopoi name, and write an essay of at least 100<br>words on what changes you would bring, values you embrace, etc.<br><br>Propaganda can be submitted to our image gallery: <br>https://booru.gikopoi.com/post/list/election Tabletop Games, online https://bbs.gikopoi.com/thread/1716427555 2024-05-23T01:25:55+00:00 2024-05-23T11:28:28+00:00 Here are some popular ways to play tabletop games, online, without the<br>need to register any account or download apps: <br><br>- https://en.crosswordsarena.com/ -- Scrabble-ish <br>- https://lichess.org -- chess<br>- https://skribbl.io/ -- Pictionary <br>- https://maque.games/ -- Zung Jung mahjong <br>- https://cardgames.io/ -- several card games, and a few board games.<br> You'll want to increase the play timers by default; it's no fun<br> losing a game due to an invisible timer running out<br><br>Services that require registration:<br>- https://dominoes.playdrift.com/ -- This is the best dominoes service<br> that I know of. However you DO need to register an account. <br>- https://www.platoapp.com/download/ -- A big collection of classic<br> games, especially for mobile devices but also for Windows desktop