← 목록으로

채팅 없는 네트워크 오픈 월드 게임 개발 실험 — Mosaic World MVP | BuntGames

2026-03-12 원문 보기 ⇗

채팅 없는 네트워크 오픈 월드 게임 개발 실험 — Mosaic World MVP

https://kitscript.com/game/world/
https://github.com/textcube/kitscript/
https://www.youtube.com/watch?v=slBr2XDtiKM

요즘 대부분의 온라인 서비스는 점점 더 많은 기능을 추가하는 방향으로 발전하고 있다. 채팅, 친구 목록, 아이템, 경제 시스템, 레벨, 퀘스트 같은 요소들이 자연스럽게 따라붙는다. 하지만 문득 이런 생각이 들었다. 정말로 그렇게 많은 기능이 필요할까.

그래서 아주 단순한 실험을 해보기로 했다. 채팅도 없고 텍스트도 없는 네트워크 월드를 만들면 어떤 느낌일까.

플레이어는 하나의 타일 블럭으로 존재한다. 그 블럭에는 이미지 하나만 들어간다. 말 대신 이미지를 올리고, 이동하고, 다른 플레이어 옆에 붙어 구조를 만든다. 누군가와 가까이 붙으면 합체 절차가 만들어지고 승인이 되면 하나의 그룹이 된다. 그렇게 모인 블럭들은 붙어서 하나의 구조처럼 움직이게 된다.

이 구조는 의외로 재미있는 장면을 만든다. 가까이서 보면 단순한 이미지 타일 몇 개지만, 멀리서 보면 여러 사람이 모여 하나의 형태를 만들기도 한다. 어떤 경우에는 단순한 패턴처럼 보이고, 어떤 경우에는 하나의 그림처럼 보이기도 한다.

이 게임에는 채팅이 없다. 닉네임도 없다. 텍스트 메시지도 없다. 대신 플레이어들은 이미지와 움직임으로 존재를 표현한다. 누군가는 고양이 사진을 올리고, 누군가는 풍경을 올리고, 누군가는 로고를 올린다. 서로 말하지 않지만, 옆에 붙고 함께 이동하면서 자연스럽게 구조가 만들어진다.

세계는 타일 기반 오픈 월드다. 확대하면 개별 블럭을 볼 수 있고, 축소하면 전체 구조를 볼 수 있다. 멀리서 보면 여러 플레이어가 만든 구조가 하나의 거대한 모자이크처럼 보이기도 한다.

기술적으로는 가능한 한 단순하게 만들었다. Canvas 기반 렌더링, 실시간 네트워크 동기화, 그리고 최소한의 UI만 남겼다. 복잡한 시스템을 얹기 시작하면 끝이 없기 때문이다. 이번 실험의 목적은 완성된 게임을 만드는 것이 아니라 얼마나 단순한 구조로도 네트워크 월드가 성립할 수 있는지 확인하는 것이었다.

기본 규칙은 매우 단순하다. 플레이어는 하나의 타일 블럭이고 그 블럭에는 이미지 하나를 올릴 수 있다. 플레이어는 타일 위를 이동할 수 있고, 다른 플레이어나 그룹의 블럭 옆에 붙으면 핸드쉐이킹 절차가 생성된다. 상대가 승인하면 같은 그룹이 된다. 그룹이 되면 블럭들은 붙어서 하나의 구조처럼 이동하게 된다.

월드에는 NPC 블럭도 존재한다. NPC는 일정 시간 동안만 존재하며 현재는 수명을 2분으로 설정해 두었다. NPC 역시 플레이어와 동일한 방식으로 합체할 수 있기 때문에 플레이어가 부족한 상황에서도 구조를 만들어 보는 실험이 가능하다. 시간이 지나면 NPC는 자연스럽게 사라지고, 그래서 월드에는 계속 새로운 블럭이 등장했다가 사라지게 된다.

월드는 확대와 축소가 가능하다. 가까이서 보면 개별 블럭이 보이고, 멀리서 보면 여러 블럭이 모여 만든 전체 구조를 볼 수 있다. 이때 멀리서 보는 장면이 오히려 더 흥미로운 경우가 많다. 작은 블럭들이 모여 하나의 거대한 모자이크처럼 보이기 때문이다.

현재 버전은 MVP 수준이기 때문에 일부 기능은 아직 구현되지 않았다. 예를 들어 그룹 내부에서 블럭의 위치를 바꾸는 기능은 아직 없다. 지금은 그룹이 형성되면 블럭들이 붙은 상태로 이동만 가능하다. 하지만 만약 그룹 내부에서 블럭을 재배치하거나 스왑할 수 있게 된다면 여러 플레이어가 협력해서 특정 모양이나 패턴을 만드는 재미가 생길 수 있을 것이다. 이 부분은 앞으로의 확장 아이디어로 남겨 두었다.

또 앞으로 다듬어야 할 부분 중 하나는 핸드쉐이킹 프로토콜이다. 지금은 플레이어가 다른 플레이어나 그룹의 블럭 옆에 붙으면 합체 절차가 생성되는 구조지만 실제로는 다양한 상황이 발생할 수 있다. 예를 들어 PLAYER ↔ PLAYER, PLAYER ↔ GROUP, GROUP ↔ GROUP 같은 다양한 조우 상황이 있다. 여러 플레이어가 동시에 합체를 시도하거나 두 그룹이 동시에 접촉하는 상황에서는 누가 승인 권한을 가지는지, 어떤 그룹 구조가 유지되는지 같은 규칙을 더 정교하게 다듬어야 한다.

또 하나 고려해야 할 것은 재접속 상황이다. 플레이어가 그룹에 속한 상태에서 접속이 종료되고 다시 접속할 경우, 그 사이에 그룹 구조가 바뀌었을 가능성이 있다. 그룹이 이동했거나 다른 플레이어가 합류했거나 일부 멤버가 분리되었을 수도 있다. 이런 상황에서는 플레이어가 접속 종료 이전과는 다른 장면을 마주하게 될 수도 있다. 그래서 앞으로는 이러한 상황을 고려한 그룹 상태 동기화와 재접속 처리 방식도 보완할 필요가 있다.

데이터 동기화는 현재 Firestore 기반으로 구현되어 있다. 플레이어 위치와 그룹 상태 같은 기본 정보는 Firestore를 통해 동기화되기 때문에 여러 사용자가 동시에 접속하면 같은 월드를 공유하게 된다.

다만 항상 서버 환경이 준비되어 있는 것은 아니기 때문에 서버가 없는 상황도 함께 고려했다. Firestore 연결이 없는 경우에는 데이터를 로컬 저장소(Local Storage)에 저장하고 단일 사용자 기준으로 월드를 시뮬레이션 방식으로 동작하도록 만들었다.

이 방식의 장점은 서버가 없어도 구조를 실험할 수 있다는 점이다. 네트워크 연결 없이도 게임 로직을 테스트할 수 있고, 개발 단계에서 빠르게 기능을 확인할 수 있다. 필요하면 Firestore를 활성화해 멀티유저 환경으로 동작시키고, 그렇지 않으면 로컬 시뮬레이션 모드로 사용할 수 있다.

이번 프로젝트에는 제한된 시간을 할당해 두었다. 개발을 하다 보면 기능을 계속 추가하고 싶어지지만 어느 순간에는 멈춰야 한다. 이번 프로젝트도 이미 할당한 시간을 넘겼고 더 기능을 추가하면 끝이 없을 것 같다는 생각이 들었다.

그래서 여기서 멈추기로 했다. 완벽하지는 않지만 MVP로는 충분하다는 판단이다.

이 실험의 목적은 완성된 게임을 만드는 것이 아니라 단순한 규칙만으로 어떤 상호작용이 만들어지는지 확인하는 것이었다.

가끔은 복잡한 시스템보다 단순한 규칙 하나가 더 흥미로운 결과를 만든다. Mosaic World는 그런 가능성을 확인해보기 위한 작은 실험이다.

그리고 이제는 이 실험을 기록으로 남기고 다음 아이디어로 넘어갈 시간이다.

어쩌면 이 구조는 다른 누군가에게 또 다른 형태의 오픈 월드 실험으로 이어질 수도 있을 것이다.

이제 여러분이 여러분만의 방식으로
여러분만의 오픈 월드를 만들어볼 차례다.

patreon.com

A Development Experiment in a Chat-Free Networked Open-World Game — Mosaic World MVP

https://kitscript.com/game/world/
https://github.com/textcube/kitscript/
https://www.youtube.com/watch?v=slBr2XDtiKM

Most online services today tend to evolve by continuously adding more features. Chat systems, friend lists, items, economic systems, levels, and quests naturally accumulate over time. But at some point a simple question came to mind: do we really need that many features?

So I decided to try a small experiment. What would a networked world with no chat and no text communication feel like?

In this world, each player exists as a single tile block. That block contains only one image. Instead of speaking, players upload images, move around, and attach themselves next to other players to form structures. When someone moves close to another player, a merge procedure is created, and if it is approved, they become part of the same group. The blocks that form a group move together as if they were one structure.

This surprisingly creates interesting scenes. Up close, it looks like just a few simple image tiles. But when viewed from a distance, multiple players can form a single shape. Sometimes it appears like a simple pattern, and other times it resembles a larger image.

There is no chat, no nickname display, and no text messaging in this game. Instead, players express themselves through images and movement. Someone might upload a photo of a cat, another person might upload a landscape, and someone else might use a logo. Without speaking, players connect by attaching their blocks and moving together, gradually forming structures.

The world itself is a tile-based open world. When zoomed in, individual blocks become visible. When zoomed out, the entire structure can be seen. From a distance, groups of players sometimes look like a large mosaic made of many small pieces.

Technically, the system was designed to remain as simple as possible. It uses Canvas-based rendering, real-time network synchronization, and only a minimal user interface. Once complex systems start piling up, development can quickly spiral out of control. The purpose of this experiment was not to build a complete game, but to see how far a networked world can exist with only a very small set of rules.

The basic rules are very simple. A player is a single tile block, and that block can contain one image. Players can move across tiles, and when they stand next to another player or group block, a handshaking procedure is created. If the other side approves, they become part of the same group. Once grouped, the blocks move together as if they were part of one structure.

The world also contains NPC blocks. NPCs exist only for a limited time, and their lifespan is currently set to two minutes. NPCs can merge with players in the same way that players merge with each other, which allows structures to be experimented with even when there are not many players online. After their lifespan expires, NPCs disappear naturally. This means that the world constantly changes as blocks appear and vanish over time.

The world supports zooming in and out. When zoomed in, you can see individual blocks clearly. When zoomed out, you can see the overall structure formed by many blocks. Often the distant view becomes the most interesting one, because the small pieces combine to form a large mosaic-like image.

Since this version is an MVP, some features have not yet been implemented. For example, the ability to rearrange block positions within a group does not exist yet. At the moment, once a group is formed, the blocks can only move together as a structure.

However, if players were able to swap or rearrange positions inside a group, it could create interesting cooperative possibilities. Multiple players could work together to form specific shapes or patterns. This remains an idea for potential future expansion.

Another area that will require refinement is the handshaking protocol. Currently, when players move next to another player or group block, a merge procedure is created. But in practice, many different interaction situations can occur. For example, there may be encounters such as PLAYER ↔ PLAYER, PLAYER ↔ GROUP, or GROUP ↔ GROUP. When several players attempt to merge simultaneously, or when two groups collide at the same time, the system needs clearer rules about who has approval authority and how the resulting group structure should be determined.

Another scenario to consider is reconnection. If a player disconnects while belonging to a group and later reconnects, the group structure may have changed during that time. The group might have moved, new players might have joined, or some members might have left. In that situation, the player could return and see a completely different scene from what they saw before disconnecting. Future versions will need to address group state synchronization and reconnection handling more carefully.

For data synchronization, the current implementation uses Firestore. Basic data such as player positions and group states are synchronized through Firestore, allowing multiple users to share the same world when connected simultaneously.

However, a server environment is not always available, so the system also considers serverless situations. When Firestore is not connected, the world data is stored in local storage, and the world runs as a single-user simulation.

This approach has a practical advantage. It allows the system to be tested even without a server. The game logic can be experimented with offline, and development iterations can proceed quickly. When needed, Firestore can be activated to enable multi-user interaction, while the local simulation mode remains available for standalone experimentation.

A time limit was set for this project from the beginning. When building software, it is very easy to keep adding features indefinitely. At some point, however, it becomes necessary to stop.

The development for this project has already exceeded the time originally allocated, and it felt like adding more features would never end. So I decided to stop here. It may not be perfect, but it is sufficient as an MVP.

The goal of this experiment was not to build a finished game, but to explore what kinds of interactions can emerge from a very small set of rules.

Sometimes a single simple rule can produce more interesting results than a complex system. Mosaic World is a small experiment designed to explore that possibility.

Now it is time to record the results of this experiment and move on to the next idea.

Perhaps this structure will inspire someone else to create a different kind of open-world experiment.

And now it is your turn to build
your own open world.

FROM BUNTGAMES.COM