1. Giko Firewall blacklist discussion |
Published: 2025-05-24 [Sat] 07:46, by |
I use shared ipv4, assigned by ISP & have no control of it. It does being shared across many hundreds of other ISP customers. I don't know how this work, maybe even NAT. Since free ipv4 addresses ended many years ago, and ipv6 is not implemented/given here. I don't have money to buy clean private ip or vpn. Unban my ip *.*.*.50 I don't have other ip & can't cchange it, sadly I can't join your game server play.gokipoi.com あなたのIPは拒否されました。TorやVPNを使わないでください。 Your IP was rejected. Please do not use Tor or VPNs. https://www.abuseipdb.com/check/*.*.*.50 What's the logic of this? Whole world is on Tor, NordVPN, you freely discussed their usage inside gikopoi chat room. I'm not using them, but it should be legal to use them. Every 3rd youtuber is promoting VPN. In many countries (china, russia, venezuela, cuba, iran, syria, libiya, africa ... etc ) it is impossible to browse internet without vpn. Banning Tor in anonymous imageboard game? Astonishing non-sence level of hypocrisy. Those sort of ip bans, making the web worse & gatekept, same stuff CF, js hCaptcha, or Anubis does does but with exception without js. Are you afraid of bots? But you do have idle bots in giko. I neven used a bot, neither spam. Quickfix: whitelist subnets. But I don't know subnets ranges of my isp. fix: pohon nonjs captcha should work fine for gikopoi. or you could come up & invent another new type of nonjs captcha. some folks made anime or math captcha. optional simple account creation (without email) is fine too, since it is sort of variation of captcha. Never ban IPv4, today they are all shared (or will be eventially soon), and behind 1 ip there could be thousands of users. |
2. |
Published: 2025-05-22 [Thu] 21:32, by |
Hm can't post screenshot? Well 'no OOP' version maybe easier to understand than OOP version. |
1. Trails In Sky Combat Emu - Procedural |
Published: 2025-05-22 [Thu] 21:28, by |
#!/usr/bin/env python3 """ Trails in the Sky - Procedural Combat Timeline Engine with Persistent Event Labels """ import os import sys import time import random # === EVENT TYPES === TYPE_CHARACTER = 0 # Player character taking action TYPE_ENEMY = 1 # Enemy AI taking action TYPE_SPELL_RESOLVE = 2 # Spell resolves after cast delay TYPE_STATUS_EXPIRE = 4 # Status effect ends TYPE_PLAYER_INPUT = 5 # Wait for player input before proceeding # === STATUS EFFECTS COLORS === STATUS_COLORS = { "Casting": "\033[37m", # Light grey / off-white "Poisoned": "\033[95m", # Purple "Burning": "\033[91m", # Red "Slowed": "\033[94m", # Blue "Haste": "\033[92m", # Green "Muted": "\033[93m", # Yellow "Dead": "\033[90m" # Gray } RESET_COLOR = "\033[0m" # === LABEL POOL (1-9,a-z,A-Z) === label_pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" label_counter = 0 def get_label(): """Get next label in the cyclic pool""" global label_counter label = label_pool[label_counter % len(label_pool)] label_counter += 1 return label # === DATA STRUCTURES === def create_character(name, hp, ep, cp, atk, defense, speed, mov, is_player=False): """Create a new character dictionary with persistent label""" return { 'name': name, 'hp': hp, 'max_hp': hp, 'ep': ep, 'cp': cp, 'atk': atk, 'defense': defense, 'speed': speed, 'mov': mov, 'is_player': is_player, 'alive': True, 'status_effects': [], 'next_action_time': 0, 'orbment': [4, 2, 0, 1, 1, 0, 0], # Fire, Water, Earth, Wind, Time, Space, Mirage 'label': get_label() } def create_spell_resolve_event(caster_id, target_id, spell_name, resolve_time): """Create a spell resolve event with persistent label""" return { 'name': f"{spell_name} ({caster_id}→{target_id})", 'next_action_time': resolve_time, 'caster_id': caster_id, 'target_id': target_id, 'spell_name': spell_name, 'type': TYPE_SPELL_RESOLVE, 'label': get_label() } def create_status_expire_event(target_id, effect_name, expire_time): """Create a status expiration event with persistent label""" return { 'name': f"{effect_name} expires", 'next_action_time': expire_time, 'target_id': target_id, 'effect_name': effect_name, 'type': TYPE_STATUS_EXPIRE, 'label': get_label() } # === UTILITY FUNCTIONS === def get_terminal_size(): try: return os.get_terminal_size() except: return type('obj', (object,), {'columns': 80, 'lines': 24}) def clear_screen(): os.system('cls' if os.name == 'nt' else 'clear') def format_time(time_val): return f"{time_val:08d}" def is_valid_participant(p): """Check if participant should be displayed on timeline""" if isinstance(p, dict): if p.get('type') == TYPE_STATUS_EXPIRE: return p['next_action_time'] > global_time return p.get('alive', True) or p.get('type') in [TYPE_SPELL_RESOLVE] return False def get_status_color_for(event): """Determine color based on spell name, status expiration, or character status""" if isinstance(event, dict): # Spell Resolve: check spell name if event.get('type') == TYPE_SPELL_RESOLVE: if event['spell_name'] == "Burn": return STATUS_COLORS["Burning"] elif event['spell_name'] == "Poison": return STATUS_COLORS["Poisoned"] elif event['spell_name'] == "Heal": return STATUS_COLORS["Haste"] # Status Expire: use the status name elif event.get('type') == TYPE_STATUS_EXPIRE: effect_name = event.get('effect_name', '') return STATUS_COLORS.get(effect_name, "") # Character: check their status effects elif 'status_effects' in event: for se in event['status_effects']: if se['name'] in STATUS_COLORS: return STATUS_COLORS[se['name']] return "" # === STATUS EFFECTS === def apply_status_effect(target, effect_name, duration, on_apply=None, on_tick=None, on_expire=None): """Apply a status effect to a target character""" existing = None for se in target['status_effects']: if se['name'] == effect_name: existing = se break if existing: if existing['duration'] > 0: existing['duration'] = max(existing['duration'], duration) return # Add the effect to the target's status list new_effect = { 'name': effect_name, 'duration': duration, 'on_apply': on_apply, 'on_tick': on_tick, 'on_expire': on_expire } target['status_effects'].append(new_effect) # Call apply function if it exists if new_effect['on_apply']: new_effect['on_apply'](target) # Create expiration event if new_effect['duration'] > 0: expire_event = create_status_expire_event( id(target), effect_name, global_time + new_effect['duration'] ) participants.append(expire_event) def tick_status_effects(characters, global_time): """Tick all active status effects""" for char in characters: if not char['alive']: continue for effect in list(char['status_effects']): effect['duration'] -= 1 if effect['on_tick']: effect['on_tick'](char) if effect['duration'] <= 0: if effect['on_expire']: effect['on_expire'](char) char['status_effects'].remove(effect) # === SPELL SYSTEM === def cast_burn_spell(caster, target, resolve_time): message = f"{caster['name']} casts Burn on {target['name']}!" print(message.rjust(31)) damage = int(caster['atk'] * 1.5) target['hp'] = max(0, target['hp'] - damage) if target['hp'] == 0: print(f"{target['name']} collapses!") target['alive'] = False # Remove Casting status caster['status_effects'] = [se for se in caster['status_effects'] if se['name'] != 'Casting'] # Apply burn effect (30 AT duration) apply_status_effect( target, "Burning", 30, on_apply=lambda t: print(f"{t['name']} catches fire!"), on_tick=lambda t: t.update({'hp': max(0, t['hp'] - 1)}), on_expire=lambda t: print(f"{t['name']} is no longer burning.") ) def cast_poison_spell(caster, target, resolve_time): print(f"{caster['name']} casts Poison on {target['name']}!") damage = int(caster['atk'] * 1.5) target['hp'] = max(0, target['hp'] - damage) if target['hp'] == 0: print(f"{target['name']} collapses!") target['alive'] = False # Remove Casting status caster['status_effects'] = [se for se in caster['status_effects'] if se['name'] != 'Casting'] # Apply poison effect (20 AT duration) apply_status_effect( target, "Poisoned", 20, on_apply=lambda t: print(f"{t['name']} is poisoned!"), on_tick=lambda t: t.update({'hp': max(0, t['hp'] - 1)}), on_expire=lambda t: print(f"{t['name']} is no longer poisoned.") ) def cast_heal_spell(caster, target, resolve_time): print(f"{caster['name']} casts Heal on {target['name']}!") target['hp'] = min(target['max_hp'], target['hp'] + 50) print(f"{target['name']} healed to {target['hp']}/{target['max_hp']}") # Remove Casting status caster['status_effects'] = [se for se in caster['status_effects'] if se['name'] != 'Casting'] # === COMBAT ACTIONS === def handle_player_turn(actor, enemies, participants, global_time): """Handle a player's turn""" print(f"\n{actor['name']}'s Turn:") print("A: Attack | B: Cast Burn | P: Cast Poison | H: Heal | R: Run") choice = input("Choose action: ").strip().lower() targets = [e for e in enemies if e['alive']] if not targets: print("No enemies alive.") return if choice == 'a': target = select_target_from_list(targets) if target: print(f"{ |
1. Digimon Card Game |
Published: 2025-05-19 [Mon] 21:08, by |
Is anyone interested in joining me on gikopoi to play the Digimon card game? Just got a starter deck and played my first game, but now the trouble is finding opponents for an unpopular TCG ;( https://steamcommunity.com/sharedfiles/filedetails/?id=2042884945 https://world.digimoncard.com/rule/pdf/manual.pdf?070723 |
1. Improving events.gikopoi |
Published: 2025-05-19 [Mon] 17:39, by |
https://events.gikopoi.com/ Wondering if anyone has ideas for improving the events code. It's worth noting that OG flash gikopoi had a similar events script built in and strongly integrated with the original game soft. Something I can think of is an Atom feed for "upcoming events" -- this could also be fed into Discord / gikopy to serve reminders -- but absolutely any and all feedback about events.gikopoi.com is welcome. It's the red-headed stepchild service at this point. IF YOU DIDN'T KNOW -- events all have a link to an .ics file that can be added to smart phones, mail clients, calendar clients no problem. And they can also serve as a way to share events with friends who don't use Gikopoi -- they show event datetime local to your computer and directly link to the event's room. So you can schedule a link in a different room than the "main room" and people can easily go there from the event page. |
59. |
Published: 2025-05-17 [Sat] 19:35, by |
>>56 After my strong success doing a 1.5x run of breakfast cereal with sugar, with various feints in my new reflux still, I was curious how running a "wash" on its own through my reflux still would do, after seeing that my new still can effectively reach azeotrope on relatively lower %s. The results were somewhat disappointing! Reaching azeotrope again took a lot of fiddling around and stalling, overall output was not worth it, and the output spirit (while quite drinkable!) was not what I was expecting. I think for the future I will be sending spirits stripped at least once to my reflux still, whether diluted feints or low wines. It does add time and electric use to the process relative to a simple one and done run, but I think the intermediary step is worth it, in terms of operator burden and quality of end result. Reflux is still a new world for me. But it's fun playing. |
58. |
Published: 2025-05-17 [Sat] 19:28, by |
>>55 I forget how many days ago I started but I started doing UJSSM (cracked corn + sugar "whisky") a few days ago and started a birdwatcher's vodka (tomato paste + sugar) last night. My plan is to save the UJSSM hearts after I hit generation 2 with a mild amount of heads/tails to age on oak and send the feints along with birdwatcher's to my reflux for future experiments. ---- Expected ABV ujssm: 9% Expected ABV birdwatchers: 12% |
2. |
Published: 2025-05-15 [Thu] 18:32, by |
12520 total 9288 ./jerk.txt 763 ./zippy.txt 502 ./kanye.txt 414 ./dhammapada.txt 372 ./sun.txt 368 ./fortunes.txt 275 ./tao.txt 184 ./giko-quotes.txt 100 ./quran.txt 100 ./bible.txt 66 ./iching.txt 44 ./tarot.txt 24 ./futhark.txt 20 ./8ball.txt |
1. random pastes |
Published: 2025-05-15 [Thu] 18:32, by |
Use as pastebin, add a subject to your comment if you want |
29. |
Published: 2025-05-12 [Mon] 17:24, by |
[2025-05-13 01:21:19] ark: LSD takes all your inner stuff and blows it out and then it comes back in [2025-05-13 01:21:37] ark: dissos freeze the outside world and blow up your inside stuff and separates it [2025-05-13 01:21:57] ark: so you can look over it all like a butcher inspecting cuts of meat in his freezer [2025-05-13 01:22:51] Butterscotch: i've never been very good at explaining dissos to my doctors and social workers but that's pretty goode way to put it |
13. |
Published: 2025-05-11 [Sun] 01:25, by |
i used to drink shou puerh cakes but now i just drink garbage "english breakfast" from a bag |
1. Kanye Happenings thread |
Published: 2025-05-10 [Sat] 19:02, by |
https://odysee.com/@Anonymous:d16/Kanye-West-Ye-HEIL-HITLER-Music-Video:9 nigga heil hitler |
7. |
Published: 2025-05-10 [Sat] 18:59, by |
>>6 you just described Indonesian food minus the milky flavor all my niggas lactose intolerant It was Indonesia not george washington carver who invented Peanut Butter we love us some delicious Satay |
6. |
Published: 2025-05-10 [Sat] 01:41, by |
>>5 for some reason the image I have is of peanuts, chili pastes, a lot of meat and fish. Also soupy curries with a milky flavor |
6. |
Published: 2025-05-09 [Fri] 23:57, by |
>>4 >>4 it makes you 1337 in exchange for CPU cycles |
5. |
Published: 2025-05-09 [Fri] 23:53, by |
i am internet i want monero |
7. |
Published: 2025-05-09 [Fri] 15:33, by |
>>6 yup There's some zzazz stuff on the booru https://booru.gikopoi.com/post/list/zzazzachu/1 maybe discord friends can upload more zzazz pics from there |
5. |
Published: 2025-05-09 [Fri] 15:31, by |
what is thai food even like? I think I must have had pad thai at least once but I can't remember what it is... |
57. |
Published: 2025-05-09 [Fri] 15:25, by |
>>55 Ran my new reflux still for the first time on 05-07, Wednesday After I took off foreshots, it stabilized at 78.3*C for nearly the entire run which means the stuff coming out was 96% ABV. Probably lost some due to evaporation, but wow. The takeoff rate was pretty slow because I'm using a hack until I buy a proper needle valve. 500ml per 2 hours. But still, 96%! I fed some old tails and heads from other runs into the boiler with most of a bucket of 12% ABV sugar wine that had breakfast cereal soaking in it for flavor. Some of the breakfast cereal notes carried through but it smells and tastes ultimately like a rum. Dilute down to the low 40%s and I ended up with 6 liters from 12 hours of operating time. Based on my math, the ~80cm of packing in a 2" pipe is achieving 13 or 14 "plates" worth of distillation when refluxing. A stripping run normally takes me 8 hours to pull out 4L of 40% that have a lot of off flavors, and running 18L of ~35% takes 9 hours to extract ~3L of "hearts" around 70%. So big picture, the reflux saves a lot of time for producing a clean, strong spirit. going to do another reflux experiment next week with the bran sugar wash, curious how it will compare to the cereal sugar wash. I suspect it will taste like a pretty good whisky. There are hints of whisky flavor in my breakfast cereal reflux (some of the heads/tails I dumped in were from my bran sugar wash spirit run) but it ultimately tastes more like rum than anything. |
4. |
Published: 2025-05-09 [Fri] 01:47, by |
https://web.archive.org/web/20120918214535/http://linuxforniggers.us/index |
6. |
Published: 2025-05-08 [Thu] 22:40, by |
is that brit who play guitar & math(haskell)? |
3. |
Published: 2025-05-08 [Thu] 10:53, by |
because we may need to tariph those UAP when Pope Guinea will join BRICKTH (korea {n} thailand hawaii) |
2. |
Published: 2025-05-08 [Thu] 10:41, by |
also, if you live in oceania's Malainesia, do you guys also have Mayan pyramids with annual UFO saucers attending to them? |
1. Unholy shiiyeet |
Published: 2025-05-08 [Thu] 10:37, by |
your board became a thailand cuisine's chamber of recipes discovered under an Egypt pyramid with cones & columns that produce electricity from space rays. I hope that won't went textboard.net |