• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

A Journey from playing Tibia to a Portable Backpack Server [Kali + Raspberry Pi + TFS 1.4.2]

Adorius Black

Advanced OT User
Joined
Mar 31, 2020
Messages
348
Solutions
3
Reaction score
226
Hey everyone! I’d like to introduce you to my gadget that I built out of pure boredom. Since I was a kid, I’ve loved hiking, and in my youth, I was a massive fan of the game Tibia. Between 2005 and 2010, I actively played "Real Tibia" as well as various OT (Open Tibia) servers like Tibiafun, Veterana, Realiaots, and Arkantes. I really enjoyed messing around with Elfbot, Bbot, and other tools. Towards the end of elementary school, I started digging deeper into the technical background, and through Shadowcores and Tibiafun, I discovered that one could actually create their own server.

I was fascinated. I registered on the OTLand and Tibia.net.pl forums, where I found an old compiled distribution. That feeling when I first managed to launch a server and install an XML acc maker was unforgettable. Back then, I was using Hamachi and couldn’t understand why others could have public servers while I couldn't. The free version of Hamachi was limiting, with a five-person cap. I tried tinkering with map editors and the "data" folder, but around 2011, during high school, I dropped it entirely.

Return to Development in the Netherlands

I returned to Tibia only in 2018 while working long-term in the Netherlands. Out of boredom, I thought about trying to create an OTS again. After years, I revisited OTLand and managed to compile TheForgottenServer 1.2 for the first time. It was a huge leap forward compared to the old Tibiafun server, which was full of malicious code. I finally had a clean server running Gesior 2012. However, I was still troubled by how to make my server public. Gradually, I figured out that I needed a static IP or a rented machine in a data center. Until then, I had no idea such a thing existed. It was a real "wow factor" for me. At the end of 2020, I launched a server called "Blackfun" for a month via Contabo. But paying €30 a month for something that wasn't earning anything seemed like a lot, so I started looking for cheaper solutions.

The World of Cybernetics and Raspberry Pi

Around the same time, I discovered the world of cybernetics. When a guy first told me about the Kali Linux operating system, I had no clue what he was talking about. I started digging into it, created my first Live USB, and began following the community on Instagram. I was amazed at the gadgets people could build. I told myself I wanted one too, so I bought my first Raspberry Pi 4B, even though I didn't know exactly what I’d use it for yet.

In 2021, I finally found a VPS that suited me. It was Zap-hosting, where they offered a "lifetime VPS." I didn't hesitate and bought it for €350 (Specs: 16GB RAM, ~2.4GHz CPU, 1Gbps connection, and 100GB storage). I learned the basics of PuTTY and Remote Desktop. I launched my Blackfun server there, which is still online today, and I still enjoy developing it. It has become a form of healthy addiction and an inseparable part of my free time. Whenever I have time off, the first thing that comes to mind is "Blackfun."

The Birth of Project "Cyber Nomad"

While creating my first security gadget, I had the idea to combine hiking, server creation, and cybernetics into one project. I wanted to be a "Cyber Nomad" who always has a server with him. Last year, I assembled my first Cyberdeck. After a few destroyed SD cards, it ended up in a drawer for a while.

A month ago, I returned to it, bought a high-quality SD card, and installed Kali Linux. My goal was clear: turn the Cyberdeck into a monitoring device while simultaneously compiling TheForgottenServer 1.4.2 on it. I suspected it was possible since Kali is based on Debian, but I couldn't find anyone on the forums using this specific combination (Kali + Raspberry Pi + TFS).

Gemini promised to help me, and we got to work. I installed the libraries, Nginx, and MariaDB, but the compilation threw errors at 7%, 40%, and 44%. Gemini helped me fix them—specifically in the iomarket.cpp files and others where the "action" needed to be wrapped in static_cast<uint16_t>(action) because the Kali compiler was strictly blocking it. Finally, the server compiled! I’ll upload it to GitHub later and put a link in my OTLand profile signature. Then I got Gesior 2012 running via PHP 8.4 (I expected I’d have to downgrade to 7.4, but it worked flawlessly). I imported the database, ran ./tfs, and the server started. From a second device (a laptop), I logged into the game via a hotspot and local network, and it worked.

I told Gemini I’m waiting for the day mobile operators start offering plans with Static Dedicated IP addresses so I can host the server directly from my iPhone and Cyberdeck right out of my backpack while hiking or camping. Gemini told me the IP issue could be bypassed using a Cloudflare tunnel, which shocked me; I couldn't believe it.

Connection Issues and Hardware Details

One last challenge remained: the Cloudflare tunnel. Since operators don't usually offer static IPs for mobile internet, I wanted to solve it this way. I bought the cheapest domain, created a tunnel via cloudflared, and set up the DNS. However, Gemini claimed that ports 7171 and 7172 had to be handled through playit.gg because Cloudflare is mainly for port 80. I paid for a premium subscription there for €3, got new IPs and 5-digit ports. We tried every combination, but at best, it only got me to the character list and no further. Around 4:00 AM, I gave up because even Gemini started repeating itself in loops, and I could see it was stuck too.

What is actually inside my Cyberdeck?

• Base: Raspberry Pi 4B 8GB.

• Display: Waveshare 5.5" Full HD Touch Display.

• Cables: I use high-quality JBL cables and HDMI. If you're building something similar, don't skimp on these. JBL cables carry enough current and, crucially, support touch data, which standard cables often don't.

• Power: I use the original Raspberry Pi adapter to avoid "low electricity" mode. For outdoors, I have a Viking 74Wh power bank (lasts 10–20 hours), the JBL cable, and a Bluetti EB3A solar station (268Wh) (lasts 2–5 days of operation). I also have Viking solar panels (70Wh and 30Wh), so I can run nonstop.

• Storage: Samsung PRO Endurance 128GB (forget cheap cards like Kingston; the Raspberry will kill them in a day). Use this Samsung or the SanDisk Extreme series. They are very durable and have fast write speeds, which is a perfect combo for an OS. I'm speaking from experience. I also have a 1TB Toshiba HDD connected for logs.

• Network: Atheros AR9271 Wi-Fi adapter, which supports monitor mode for working with Wireshark.

• Cooling: Everything is screwed onto a Yenkee cooling pad that I have hanging on my wall. For outdoor use, I just grab it and go.

With this gadget, you are unstoppable. The Raspberry Pi handles the server with ease; it’s silent and doesn't overheat. I’m not sure how it would perform with 100–1000 players online, though. At home, you can let the Raspberry server run 24/7 since it only consumes about €7 worth of electricity per year.

My goal is clear: an energy-independent, portable server that changes location depending on where I am. My future plan is to solve that portable hotspot with a static IP. If I succeed, my server won't be dedicated in some data center, but I’ll be carrying it in my backpack 24/7, whether I’m in the mountains, the woods, by the sea, or just camping. To upgrade it even further, I’d swap the internet for Starlink, meaning I could catch a satellite signal and host my server in the middle of the Pacific, a desolate desert, or on the peaks of the Himalayas, straight from my backpack. My server would move wherever my feet take me. I know it’s not as practical as professional solutions, but the idea of an energy-self-sufficient portable server that moves with me is fascinating. And I wonder if Starlink offers static IPs—that would solve everything in one go.

What do you guys think about this kind of theforgottenserver hosting?
IMG_2874.webpIMG_2875.webpIMG_2877.webpIMG_2878.webp
Post automatically merged:

IMG_2879.webpIMG_2862.webp
Post automatically merged:

IMG_2880.webpIMG_2881.webp
 
Last edited:
IMG_2981.webp

Today Just arrived my new Addressable LED Strips (WS2812B) (IP67) for Cyberdeck Integration 🛠️📟

To-Do List:
• Server Attack Detected ➔ Solid Red Alert 🚨🔴
• Player Login ➔ Green Glow (5 sec) 🟢👤
• BFN Token Purchase ➔ Green Flash 💹💸
• BFN Token Sale ➔ Red Flash 📉🔥
 
A cyber nomad, who carries around a raspberry pi, have found a strange ass host with lifetime servers (tell me more about your experience with this!), loves hiking and backpacking
... while compiling OT servers.

Now thats crazy!

I love it! :D


I think you need to get RME working on your nomadic setup, so you can go hiking, take inspiration and start mapping! :D


Could you neofetch me your Zap-hosting vps? I'm curious about the CPU cores.
 
Last edited:
A cyber nomad, who carries around a raspberry pi, have found a strange ass host with lifetime servers (tell me more about your experience with this!), loves hiking and backpacking
... while compiling OT servers.

Now thats crazy!

I love it! :D
😏

Will check it later… Maybe…

Could you neofetch me your Zap-hosting vps? I'm curious about the CPU cores.
Dont have time. Bussy with compiling RME for 5.5’ display… 🙃
 
Last edited:
🔌 Connect LED [Hardware preparation]
⚠️ Be Careful!

One side of LED:
🟢 - Data (GPIO 18): pin 12 [6th pin from up left]
⚪️- GND (Ground): pin 6 [3rd pin from up left]
🔴 - Power: USB 🔴 cable [tape]
IMG_3048.webp
Other side of LED:
⚪️ - GND (Ground): USB ⚫️ cable [tape]
IMG_3049.webp
Rest of cables tape and leave it.

📟 Build first Script: [Software preparation]

1. System Package List Update:
sudo apt-get update
2. Python Package Manager Installation
sudo apt-get install - y python3-pip
3. GPIO Library Installation
sudo pip3 install RPi.GPIO --break-system-packages
4. System Utilities Library Installation
sudo pip3 install psutil --break-system-packages
5. LED Control Libraries Installation
sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel --break-system-packages
6. Script - Processor Usage 🔵🟢🟡🔴
Python:
import board
import neopixel
import psutil
import time

num_pixels = 120
pixels = neopixel.NeoPixel(board.D18, num_pixels, brightness=0.05, auto_write=False)

def get_color_complex(index, total):
 
    pos = index / total
 
    if pos < 0.25:
        return (0, int(pos * 4 * 255), 255)
    elif pos < 0.5:
        return (0, 255, int(255 - (pos - 0.25) * 4 * 255))
    elif pos < 0.75:
        return (int((pos - 0.5) * 4 * 255), 255, 0)
    else:
        return (255, int(255 - (pos - 0.75) * 4 * 255), 0)

try:
    print("Start Processor Gradient Monitor...")
    while True:
 
        cpu = psutil.cpu_percent()
 
        leds_to_light = int((cpu / 100) * num_pixels)
 
        for i in range(num_pixels):
            if i < leds_to_light:
 
                pixels[i] = get_color_complex(i, num_pixels)
            else:
                pixels[i] = (0, 0, 0)
 
        pixels.show()
        time.sleep(0.1)

except KeyboardInterrupt:
    pixels.fill((0, 0, 0))
    pixels.show()
This Python script transforms an LED strip into a real-time visual indicator of your Raspberry Pi's CPU usage. It creates a dynamic bar graph where the number of lit LEDs represents the current processor load.

🔑 Key Features:

• System Monitoring: Uses the psutil library to track the CPU load percentage every 0.1 seconds.

• Dynamic Scaling: Automatically calculates how many of the 120 LEDs should light up based on the CPU percentage (e.g., 50% load = 60 LEDs lit).

• Complex Color Gradient: Instead of a single color, the script generates a smooth Blue → Green → Yellow → Red transition.

• Safety Optimized: The brightness is set to a low 5% (0.05) to prevent eye strain and avoid overloading the Raspberry Pi's power supply.

Have fun! 🥳

 
Last edited:
So cool man! I've been thinking of doing something like this for some time now but never got around to it...

Im happy to follow you. Good luck man!!
 
When somebody login into server 🟢 light 5 seconds then back processor usage
Python:
import board
import neopixel
import psutil
import time

# Configuration: 120 LEDs, Pin 12 (GPIO 18), 5% brightness for safe operation
num_pixels = 120
pixels = neopixel.NeoPixel(board.D18, num_pixels, brightness=0.05, auto_write=False)

def get_color_complex(index, total):
    # Calculates a smooth color transition: Blue -> Cyan -> Green -> Yellow -> Red
    pos = index / total
    if pos < 0.25: # 0-25%: Blue to Cyan
        return (0, int(pos * 4 * 255), 255)
    elif pos < 0.5: # 25-50%: Cyan to Green
        return (0, 255, int(255 - (pos - 0.25) * 4 * 255))
    elif pos < 0.75: # 50-75%: Green to Yellow
        return (int((pos - 0.5) * 4 * 255), 255, 0)
    else: # 75-100%: Yellow to Red
        return (255, int(255 - (pos - 0.75) * 4 * 255), 0)

def is_player_in_game():
    # Monitors Port 7172 (TFS Game Port). Active only when a player is in the game world.
    connections = psutil.net_connections()
    for conn in connections:
        if conn.laddr.port == 7172 and conn.status == 'ESTABLISHED':
            return True
    return False

# Tracks previous state to trigger the notification only once per login
was_in_game = False

try:
    print("Blackfun.observer is running...")
    print("Monitoring CPU load and TFS game logins on port 7172.")
   
    while True:
        currently_in_game = is_player_in_game()
       
        # Trigger green notification if a new player connection is detected
        if currently_in_game and not was_in_game:
            print("Event: Player entered the game world!")
            pixels.fill((0, 255, 0)) # Set all LEDs to solid Green
            pixels.show()
            time.sleep(5) # Keep the notification visible for 5 seconds
            was_in_game = True # Update state to avoid repeated triggers
       
        # Reset tracking when the game world is empty
        if not currently_in_game:
            was_in_game = False

        # Default mode: CPU Load Gradient
        cpu = psutil.cpu_percent()
        leds_to_light = int((cpu / 100) * num_pixels)
       
        for i in range(num_pixels):
            if i < leds_to_light:
                # Apply color based on LED position in the spectrum
                pixels[i] = get_color_complex(i, num_pixels)
            else:
                # Turn off LEDs above the current CPU percentage
                pixels[i] = (0, 0, 0)
       
        pixels.show()
        time.sleep(0.1) # Fast refresh rate for smooth movement

except KeyboardInterrupt:
    # Safely turn off all LEDs when the script is stopped (Ctrl+C)
    pixels.fill((0, 0, 0))
    pixels.show()
 
Well… I crack my SD card again… 😖 its 3rd card. Always same misstake. 😏 Waiting for another I ordered. The plan for now is to flash DietPi onto the SD card for better optimization. Connect the RPi to the Samsung TV, then recompile and run the server on MariaDB and Nginx. Enable key-based login and disable port 22.

Does that make sense? 😋
 
Last edited:
"Since upgrading to a new SD card, Kali Linux is the only OS stable enough for my current setup. I'm back on Kali, running it on a Samsung TV with a wired keyboard and mouse to keep power consumption lower than a typical desktop rig.


I’ve been consulting with an AI about performance benchmarks: apparently, DietPi could handle 90–110 concurrent players, while Kali sits around 60–80. While those numbers are estimates, my immediate goal is to fully optimize the environment, including toggling the GUI off to save resources.


To manage the performance, I'll be using these commands:


• Disable GUI on boot (Text Mode): sudo systemctl set-default multi-user.target


• Enable GUI on boot (Graphical Mode): sudo systemctl set-default graphical.target


So far, I’ve successfully recompiled TFS 1.4.2, set up MariaDB, Nginx, and PHP 8.4, and purged Apache2 and MySQL to keep the system lean. I’ve imported the database and deployed the Blackfun Gesior ACC to /var/www/html. I’m still troubleshooting some issues, so I might try the original source files next."

"I’ve been thinking about integrating several components into a DeWalt case for a custom build. The idea is to feature a 15.6-inch N156B6-L0B display (Chimei Innolux) LED panel with 1366x768 resolution from my old Toshiba notebook I had years ago with camera. That would be ideal for a cyberdeck setup.

For the heart of the system, I'm considering my Raspberry Pi 4 (8GB RAM), powered by a 20,000mAh Viking power bank, which should theoretically provide 10–15 hours of continuous uptime. My plan includes using a wireless keyboard, a Wi-Fi adapter with monitor mode support, and a 1TB Toshiba HDD for storage. I added also mouse pad “Volcano” with LED lights

To nail the cyberpunk aesthetic, I’m thinking about adding addressable RGB LEDs inside the case. I'm also looking into using a 30W Viking solar panel for charging on the go.

IMG_3199.webp

IMG_3200.webp

IMG_3196.webp

P.S: I need to use a multifunctional LCD controller board (HDMI/VGA/DVI), 40-pin I-PEX LVDS cable, and an HDMI cable to repurpose this old laptop panel (N156BGE-L41). 😏 Found some stores selling these... Just imagine running this deck on a LattePanda Sigma with 32GB RAM, featuring a dual-boot setup with Ubuntu and Windows.
But if you want to use the LattePanda, you must have a more powerful battery than mine Viking 20000. It can, however, run on a Bluetti portable power station, and bigger 70W solar I showed before.

LattePanda Sigma:
IMG_3203.webp
IMG_3204.webp
 
Last edited:
I'm considering a 'Community-Driven Recovery' feature: a 'GET UP' button on the website. When your server crash any person can just visit OT webpage click on “GET UP” button and script will restarts the .tfs process via SSH. It ensures 100% uptime even when admin is away. What do you think about this level of transparency and community control?asqa.webp
 
Last edited:
Have you ever thought about an internet cafe running TFS? Interactive LEDs. You log into the game, the LEDs at your desk blink green; you log out, they blink red. An in-game event? The LEDs in the entire cafe glow yellow... and in that moment, gaming transforms into a collective ritual. Imagine the scene: you’re sitting in the dim light, your notebook plugged into the network, and suddenly the whole room ripples with blue light because someone just activated Utamo Vita.

There wouldn't even be any house PCs; instead, everyone could bring their own machine and connect to the network via cable or Wi-Fi. The entire space would essentially be pure infrastructure—rows of empty desks with ready-made connectivity, where only that intelligent LED system awaits. You arrive, unpack your rig, snap in the Ethernet cable, and the moment your client authenticates on TFS 1.4.2, the system recognizes your physical location in the room and assigns you your light zone.

People could connect from all over the world, but the cafe customers playing on-site would be rewarded with perks like a +10% exp boost or other unique modifications. By checking IP addresses, TFS would instantly know who is sitting in the cafe and who is playing from home, automatically assigning special flags in the database to "local" players.

If someone in the corner of the cafe gets a "Red Skull," their desk is flooded with an aggressive crimson, telling everyone in the room without a word: "Watch out for me." With every level up, your desk would emit a bright white flash, reflecting off the chassis of your own laptop or cyberdeck, momentarily linking digital success with physical euphoria. A character's death, on the other hand, would be accompanied by a sudden blackout of all lights at that specific port, creating a dramatic silence in an otherwise pulsing space.

Everything would be managed by the server in the background, which, through Lua scripts and local IP identification, would send signals to LEDs under every single port. The cafe would cease to be just a room with rows of computers and become a living organism, where every move you make in the game shifts the atmosphere of reality around you. It would be a space where the line between code and light definitively vanishes, and where your hardware isn't just an isolated tool, but the key to controlling this entire immersive ecosystem.
 
Have you ever thought about an internet cafe running TFS? Interactive LEDs. You log into the game, the LEDs at your desk blink green; you log out, they blink red. An in-game event? The LEDs in the entire cafe glow yellow... and in that moment, gaming transforms into a collective ritual. Imagine the scene: you’re sitting in the dim light, your notebook plugged into the network, and suddenly the whole room ripples with blue light because someone just activated Utamo Vita.

There wouldn't even be any house PCs; instead, everyone could bring their own machine and connect to the network via cable or Wi-Fi. The entire space would essentially be pure infrastructure—rows of empty desks with ready-made connectivity, where only that intelligent LED system awaits. You arrive, unpack your rig, snap in the Ethernet cable, and the moment your client authenticates on TFS 1.4.2, the system recognizes your physical location in the room and assigns you your light zone.

People could connect from all over the world, but the cafe customers playing on-site would be rewarded with perks like a +10% exp boost or other unique modifications. By checking IP addresses, TFS would instantly know who is sitting in the cafe and who is playing from home, automatically assigning special flags in the database to "local" players.

If someone in the corner of the cafe gets a "Red Skull," their desk is flooded with an aggressive crimson, telling everyone in the room without a word: "Watch out for me." With every level up, your desk would emit a bright white flash, reflecting off the chassis of your own laptop or cyberdeck, momentarily linking digital success with physical euphoria. A character's death, on the other hand, would be accompanied by a sudden blackout of all lights at that specific port, creating a dramatic silence in an otherwise pulsing space.

Everything would be managed by the server in the background, which, through Lua scripts and local IP identification, would send signals to LEDs under every single port. The cafe would cease to be just a room with rows of computers and become a living organism, where every move you make in the game shifts the atmosphere of reality around you. It would be a space where the line between code and light definitively vanishes, and where your hardware isn't just an isolated tool, but the key to controlling this entire immersive ecosystem.

Are you bored? 😅
 
I'm moving from Gesior to Znote after years of use. Is Znote a better long-term foundation for TFS 1.4.2 projects? What do you think?
 
Last edited:
Makes no difference at all :D
But if I were you, go with myACC
I have problem to run fully gesior on ubuntu 24. Its working good on ubuntu 20 but I dont think i should stay on ubuntu 20. So i dont know what to do now… I have many custom code on gesior so its sad for me to move on other acc. But i think I am getting trapped, so maybe will be better to rewrite my customs to Znote or Myacc

EDIT:
Well.. Somehow I did it. Was issue with sql_mode='' i think and with not imported all tables. But I am back to gesior with php7.4-fpm, nginx, mariadb and ubuntu 24 finaly... :P
Screenshot from 2026-02-03 18-49-17.webp
 
Last edited:
I have problem to run fully gesior on ubuntu 24. Its working good on ubuntu 20 but I dont think i should stay on ubuntu 20. So i dont know what to do now… I have many custom code on gesior so its sad for me to move on other acc. But i think I am getting trapped, so maybe will be better to rewrite my customs to Znote or Myacc

If im not wrong
You can take ur whole gesior website with myacc
 
OTLanders! My 'new' refurbished Lenovo P320 just arrived: 16GB RAM, 4 cores at 3.4GHz (4.0GHz turbo). It should be able to handle about 200–300 users easily. I'm heading out to buy a Male VGA to HDMI adapter so I can control both my RPi server and this Lenovo rig via remote. I really hope my plan works out :) If it does, it's time to party! 🥳

Not bad price at all… 199€

I don’t know if I can say prices here, if not sorry… but…

Come take a look! 😉

IMG_3311.webpIMG_3312.webp
IMG_3313.webp

Plans for now…

1. Install Ubuntu
2. Compile tfs 1.4.2
3. 🤔 Think later…
 
Alright folks. Double Computer support. HDMI-1 is a Lenovo P320 running Ubuntu as a server, and HDMI-2 is a Raspberry Pi (Cyberdeck) running Kali Linux for penetration testing the Lenovo server.

I'm still having some issues with Gesior and the website on Lenovo, but I hope to get them sorted out again soon. ✌🏽

P.S. Pay no mind to the cable spiderweb :D Every cable is doing exactly what it has to do 😅. I will sort it & hide it When everything will be done :P

 
Last edited:
Back
Top