<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>NTS Apps 개발 기록</title>
  <link href="https://ntsapp.dev/devlog/" />
  <link rel="self" href="https://ntsapp.dev/feed.xml" />
  <id>https://ntsapp.dev/</id>
  <updated>2026-08-28T00:00:00+09:00</updated>
  <author><name>NTS Apps</name></author>
  <entry>
    <title>보드가 갉아먹히기 시작하자 매치-3가 다른 게임이 됐습니다</title>
    <link href="https://ntsapp.dev/devlog/match-siege-blight-board/" />
    <id>https://ntsapp.dev/devlog/match-siege-blight-board/</id>
    <published>2026-08-28T00:00:00+09:00</published>
    <updated>2026-08-28T00:00:00+09:00</updated>
    <summary>매치 시즈는 보드 자체가 전장입니다. 침식이 가장자리부터 칸을 먹어 들어오고, 매치가 그걸 밀어냅니다. 침식 칸을 블록이 아니라 장애물로 정의한 것, 번지기 전에 2.4초를 예고한 것, 이 둘이 게임의 성격을 정했습니다.</summary>
  </entry>
  <entry>
    <title>어두운 보석을 다 버리고 캔디로 갈아엎었습니다</title>
    <link href="https://ntsapp.dev/devlog/match-siege-candy-art/" />
    <id>https://ntsapp.dev/devlog/match-siege-candy-art/</id>
    <published>2026-08-28T00:00:00+09:00</published>
    <updated>2026-08-28T00:00:00+09:00</updated>
    <summary>규칙은 그대로 두고 그림만 바꿨는데 게임이 달라 보입니다. 귀여움은 색이 아니라 흰 테두리·얼굴·광택·좁은 명도 폭에서 나왔습니다. 보드도 7×7에서 8×8로 넓히고 목표 점수를 다시 잡았습니다.</summary>
  </entry>
  <entry>
    <title>위협 둘과 기회 둘 — 이벤트 네 가지를 넣었습니다</title>
    <link href="https://ntsapp.dev/devlog/match-siege-events/" />
    <id>https://ntsapp.dev/devlog/match-siege-events/</id>
    <published>2026-08-28T00:00:00+09:00</published>
    <updated>2026-08-28T00:00:00+09:00</updated>
    <summary>같은 판이 계속되면 지루해집니다. 매치 시즈에 주기적으로 터지는 사건 네 가지를 넣었습니다. 위협 둘, 기회 둘을 섞어 같은 것이 연달아 나오지 않게 했고, 특수 블록으로 통째로 받아칠 수 있게 설계했습니다.</summary>
  </entry>
  <entry>
    <title>하트와 온라인 순위표를 붙였습니다 — 개수 대신 시각 하나만 저장합니다</title>
    <link href="https://ntsapp.dev/devlog/match-siege-hearts-and-ranking/" />
    <id>https://ntsapp.dev/devlog/match-siege-hearts-and-ranking/</id>
    <published>2026-08-28T00:00:00+09:00</published>
    <updated>2026-08-28T00:00:00+09:00</updated>
    <summary>타이틀 화면, 하트 다섯 개, 닉네임, 서버 순위표, 상태를 따라가는 BGM 세 트랙을 넣었습니다. 하트는 개수와 시각을 같이 저장하면 반드시 어긋나기 때문에 회복 기준 시각 하나만 진실로 두었습니다.</summary>
  </entry>
  <entry>
    <title>이벤트를 일곱 가지로 늘리고, 판마다 하나씩 열리게 했습니다</title>
    <link href="https://ntsapp.dev/devlog/match-siege-seven-events/" />
    <id>https://ntsapp.dev/devlog/match-siege-seven-events/</id>
    <published>2026-08-28T00:00:00+09:00</published>
    <updated>2026-08-28T00:00:00+09:00</updated>
    <summary>위협 둘과 기회 둘로 시작한 이벤트에 셋을 더 붙였습니다. 선물·컬러밤·중심 침식입니다. 전부 처음부터 나오면 첫 판이 시끄러워서, 판이 오를 때마다 하나씩 열리게 했습니다. 직선 5매치 보상도 폭탄에서 컬러밤으로 바꿨습니다.</summary>
  </entry>
  <entry>
    <title>137MB짜리 게임을 파일당 25MiB 한도에 올렸습니다</title>
    <link href="https://ntsapp.dev/devlog/monster-arc-137mb-deploy/" />
    <id>https://ntsapp.dev/devlog/monster-arc-137mb-deploy/</id>
    <published>2026-08-28T00:00:00+09:00</published>
    <updated>2026-08-28T00:00:00+09:00</updated>
    <summary>압축으로는 못 넘겼습니다. gzip을 걸어도 97MB로 여전히 한도의 네 배였습니다. 조각을 내서 워커가 이어 붙이게 했는데, 한꺼번에 받으면 137MB가 워커 메모리에 얹힙니다.</summary>
  </entry>
  <entry>
    <title>옷을 세 벌 입혀도 비용이 안 늘게 만들었습니다</title>
    <link href="https://ntsapp.dev/devlog/monster-arc-outfit-slots/" />
    <id>https://ntsapp.dev/devlog/monster-arc-outfit-slots/</id>
    <published>2026-08-28T00:00:00+09:00</published>
    <updated>2026-08-28T00:00:00+09:00</updated>
    <summary>상의·하의·신발을 부위별로 골라 섞어 입는 시스템을 넣었습니다. 그냥 얹으면 입힌 만큼 그릴 것이 늘어납니다. 실행 중에 한 벌로 합쳐 구워서, 몇 개를 끼워도 표면이 하나만 늘어나게 했습니다.</summary>
  </entry>
  <entry>
    <title>엔진이 무거워서 손이 안 갔습니다 — Unity에서 Godot으로 다시 썼습니다</title>
    <link href="https://ntsapp.dev/devlog/liquid-pvp-godot-rewrite/" />
    <id>https://ntsapp.dev/devlog/liquid-pvp-godot-rewrite/</id>
    <published>2026-08-26T00:00:00+09:00</published>
    <updated>2026-08-26T00:00:00+09:00</updated>
    <summary>만들어 둔 게임을 통째로 다시 썼습니다. 기능이 모자라서가 아니라 한 번 고치고 확인하는 데 드는 시간이 길어서 손이 안 갔기 때문입니다. 33커밋으로 처음부터 온라인 대전까지 왔고, 액체 표현은 이참에 셰이더로 다시 만들었습니다.</summary>
  </entry>
  <entry>
    <title>봇이 조용했습니다 — 오류도 안 내고</title>
    <link href="https://ntsapp.dev/devlog/bungae-bungae-chat-bot/" />
    <id>https://ntsapp.dev/devlog/bungae-bungae-chat-bot/</id>
    <published>2026-08-25T00:00:00+09:00</published>
    <updated>2026-08-25T00:00:00+09:00</updated>
    <summary>벙개벙개 대화방에 AI 봇을 붙였습니다. 불러도 아무 말이 없는 경우가 두 가지 있었는데, 하나는 생각하느라 답할 예산을 다 써서였고 하나는 답이 JSON이 아니라 파싱에 실패해서였습니다. 둘 다 오류가 나지 않습니다.</summary>
  </entry>
  <entry>
    <title>파향 화살표가 정반대를 가리키고 있었습니다</title>
    <link href="https://ntsapp.dev/devlog/fishing-diary-marine-conditions/" />
    <id>https://ntsapp.dev/devlog/fishing-diary-marine-conditions/</id>
    <published>2026-08-25T00:00:00+09:00</published>
    <updated>2026-08-25T00:00:00+09:00</updated>
    <summary>낚시일기 물때 위젯에 실시간 파고와 너울을 붙였습니다. 파향 화살표를 그리고 나서 방향이 이상해 문서와 실측을 둘 다 확인했는데, 데이터가 말하는 각도는 파도가 가는 쪽이 아니라 오는 쪽이었습니다.</summary>
  </entry>
  <entry>
    <title>평균 13ms인데 &quot;뚝뚝 끊긴다&quot;는 제보가 계속 왔습니다</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-hunting-stutter/" />
    <id>https://ntsapp.dev/devlog/fps-arena-hunting-stutter/</id>
    <published>2026-08-24T00:00:00+09:00</published>
    <updated>2026-08-24T00:00:00+09:00</updated>
    <summary>평균만 보면 60fps인데 스무 프레임 중 하나가 33ms로 튀면 눈에는 그게 전부입니다. 원인을 찾는 데 계측을 세 번 새로 만들었고, 그 사이 제가 한 번은 원인을 잘못 짚어 글에도 그렇게 적었습니다.</summary>
  </entry>
  <entry>
    <title>&quot;\&quot;상대가 지나갔는데 다시 지나간다\&quot; — 프레임이 튄 게 아니었습니다&quot;</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-remote-teleport/" />
    <id>https://ntsapp.dev/devlog/fps-arena-remote-teleport/</id>
    <published>2026-08-24T00:00:00+09:00</published>
    <updated>2026-08-24T00:00:00+09:00</updated>
    <summary>멀티에서 남의 캐릭터를 서버가 보내 준 자리에 그대로 갖다 놓고 있었습니다. 스냅샷은 초당 스무 번 오고 화면은 예순 번 그립니다. 패킷이 늦거나 순서가 뒤바뀌면 지나갔던 자리로 되돌아갑니다.</summary>
  </entry>
  <entry>
    <title>새 맵을 만들어 놓고 옛 맵에서 놀고 있었습니다</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-drop-the-old-maps/" />
    <id>https://ntsapp.dev/devlog/fps-arena-drop-the-old-maps/</id>
    <published>2026-08-21T00:00:00+09:00</published>
    <updated>2026-08-21T00:00:00+09:00</updated>
    <summary>받아 온 맵 다섯을 붙이고 예전 상자 맵 여섯을 그대로 뒀더니, 무작위로 시작할 때 절반이 옛 맵이었습니다. 여섯을 걷어냈습니다. 그리고 합치기 과정에서 맵 지오메트리 20%가 조용히 사라지고 있었습니다.</summary>
  </entry>
  <entry>
    <title>조준하면 개머리판이 눈앞 11cm에 섰습니다</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-scope-and-settings/" />
    <id>https://ntsapp.dev/devlog/fps-arena-scope-and-settings/</id>
    <published>2026-08-21T00:00:00+09:00</published>
    <updated>2026-08-21T00:00:00+09:00</updated>
    <summary>우클릭으로 조준하면 총이 화면을 통째로 덮었습니다. 조준 자세 좌표가 상자로 만들던 짧은 총 시절 값이라, 진짜 총 모델을 끼우자 개머리판이 뒤로 뻗어 눈에 박혔습니다. 저격총은 아예 카메라 뒤에 있었습니다.</summary>
  </entry>
  <entry>
    <title>최적화 네 개가 전부 헛방이었습니다 — 걸린 것과 효과가 있는 것은 다릅니다</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-draw-calls/" />
    <id>https://ntsapp.dev/devlog/fps-arena-draw-calls/</id>
    <published>2026-08-19T00:00:00+09:00</published>
    <updated>2026-08-19T00:00:00+09:00</updated>
    <summary>3D 캐릭터가 복셀보다 프레임 타임이 두 배였습니다. 재질 공유, 그림자 끄기, 원거리 생략, 화면 밖 애니메이션 정지를 넣었고 넷 다 실제로 걸렸습니다. 프레임 타임은 하나도 안 움직였습니다.</summary>
  </entry>
  <entry>
    <title>소스에서는 멀쩡하고 배포본에서만 부서지는 것 세 가지</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-export-only-bugs/" />
    <id>https://ntsapp.dev/devlog/fps-arena-export-only-bugs/</id>
    <published>2026-08-19T00:00:00+09:00</published>
    <updated>2026-08-19T00:00:00+09:00</updated>
    <summary>3D 캐릭터를 붙였더니 브라우저에서만 블럭 몸으로 나왔고, 고쳤더니 전부 T자세로 걸어 다녔고, 그것도 고쳤는데 여전히 안 움직였습니다. 셋 다 개발 중에는 절대 안 나옵니다. 그리고 제가 &quot;문제 없음&quot;이라고 결론 낸 검사 방법 자체가 틀렸습니다.</summary>
  </entry>
  <entry>
    <title>랩을 버렸습니다 — 원에는 이야기가 없습니다</title>
    <link href="https://ntsapp.dev/devlog/ocean-racing-voyage/" />
    <id>https://ntsapp.dev/devlog/ocean-racing-voyage/</id>
    <published>2026-08-19T00:00:00+09:00</published>
    <updated>2026-08-19T00:00:00+09:00</updated>
    <summary>코스를 도는 레이싱을 섬에서 섬으로 가는 항해로 바꿨습니다. 나빠지는 날씨, 차오르는 선체, 뒤에 붙는 배는 가려는 곳이 있어야 의미가 생깁니다. 그리고 배수를 공짜에서 배터리를 쓰는 일로 바꾸자 고리가 닫혔습니다.</summary>
  </entry>
  <entry>
    <title>애드센스가 &quot;가치가 별로 없는 콘텐츠&quot;라고 했습니다</title>
    <link href="https://ntsapp.dev/devlog/site-low-value-content/" />
    <id>https://ntsapp.dev/devlog/site-low-value-content/</id>
    <published>2026-08-19T00:00:00+09:00</published>
    <updated>2026-08-19T00:00:00+09:00</updated>
    <summary>심사에서 거절당했습니다. 저는 신청해도 되는 상태라고 판단했었고, 판단 근거는 분량이었습니다. 페이지를 재 보니 분량은 문제가 아니었고, 얇은 페이지가 어디에 있느냐가 문제였습니다.</summary>
  </entry>
  <entry>
    <title>게이트를 근접으로 판정하면 빠른 배가 그냥 뚫고 지나갑니다</title>
    <link href="https://ntsapp.dev/devlog/ocean-racing-course-and-ai/" />
    <id>https://ntsapp.dev/devlog/ocean-racing-course-and-ai/</id>
    <published>2026-08-18T00:00:00+09:00</published>
    <updated>2026-08-18T00:00:00+09:00</updated>
    <summary>코스 통과를 반경으로 재면 의미 있을 만큼 작은 반경은 관통당할 만큼 작습니다. 그리고 AI 상대에게는 스로틀과 타 두 값만 줬습니다 — 배를 직접 옮기는 순간 그건 드라이버가 아니라 치트가 되기 때문입니다.</summary>
  </entry>
  <entry>
    <title>아이템을 한 번도 못 먹었는데, 트리거는 멀쩡했습니다</title>
    <link href="https://ntsapp.dev/devlog/ocean-racing-items/" />
    <id>https://ntsapp.dev/devlog/ocean-racing-items/</id>
    <published>2026-08-18T00:00:00+09:00</published>
    <updated>2026-08-18T00:00:00+09:00</updated>
    <summary>상자를 지나가면 먹히는 게 정상인데 40초를 달려도 한 번도 안 먹혔습니다. 원인은 트리거가 아니라 배치였습니다. &quot;레이싱 라인&quot;이라는 게 하나로 있지 않아서, 한 줄로는 어디에 놓아도 맞지 않았습니다.</summary>
  </entry>
  <entry>
    <title>점수를 매기는 것과 그 점수가 맞는지는 다른 문제입니다</title>
    <link href="https://ntsapp.dev/devlog/stock-radar-not-a-signal/" />
    <id>https://ntsapp.dev/devlog/stock-radar-not-a-signal/</id>
    <published>2026-08-18T00:00:00+09:00</published>
    <updated>2026-08-18T00:00:00+09:00</updated>
    <summary>뉴스와 재무제표를 규칙으로 점수화해 종목을 훑는 도구를 만들었습니다. 매일 아침 스스로 갱신까지 합니다. 그런데 이 점수가 실제로 맞았는지는 아직 아무도 모릅니다 — 성과 추적을 안 만들었기 때문입니다.</summary>
  </entry>
  <entry>
    <title>찌를 단 건 분위기 때문이 아니라 루어가 안 보여서였습니다</title>
    <link href="https://ntsapp.dev/devlog/ocean-fishing-casting/" />
    <id>https://ntsapp.dev/devlog/ocean-fishing-casting/</id>
    <published>2026-08-12T00:00:00+09:00</published>
    <updated>2026-08-12T00:00:00+09:00</updated>
    <summary>굴절 패스에는 최소 크기가 있습니다. 가느다란 물체는 샘플이 죄다 빗나가 물속에서 사라집니다. 10cm 루어를 1m로 키우면 그림은 고쳐지고 게임이 망가지므로, 실제 낚시가 쓰는 답을 그대로 썼습니다.</summary>
  </entry>
  <entry>
    <title>드랙이 텐션의 상한입니다 — 이 한 줄이 파이팅 전부를 정했습니다</title>
    <link href="https://ntsapp.dev/devlog/ocean-fishing-fight/" />
    <id>https://ntsapp.dev/devlog/ocean-fishing-fight/</id>
    <published>2026-08-12T00:00:00+09:00</published>
    <updated>2026-08-12T00:00:00+09:00</updated>
    <summary>드랙보다 센 물고기는 줄을 끊지 않고 줄을 가져갑니다. 이 규칙 하나에서 지는 방법 두 가지가 서로 반대로 갈라져 나옵니다. 튜닝하면서 오류를 다섯 개 고쳤는데 전부 실측이 잡아냈습니다.</summary>
  </entry>
  <entry>
    <title>흠 하나 없는 건 동물이 아니라 사출 플라스틱의 성질입니다</title>
    <link href="https://ntsapp.dev/devlog/ocean-fishing-fish-body/" />
    <id>https://ntsapp.dev/devlog/ocean-fishing-fish-body/</id>
    <published>2026-08-12T00:00:00+09:00</published>
    <updated>2026-08-12T00:00:00+09:00</updated>
    <summary>형태와 색을 다 잡고도 물고기가 장난감처럼 보였습니다. 모든 개체가 공장에서 막 나온 상태였기 때문입니다. 벗겨진 비늘도, 아문 상처도, 갈라진 지느러미도 없었습니다.</summary>
  </entry>
  <entry>
    <title>팔을 세 번 만들고 세 번 다 지웠습니다</title>
    <link href="https://ntsapp.dev/devlog/ocean-fishing-hands-and-bar/" />
    <id>https://ntsapp.dev/devlog/ocean-fishing-hands-and-bar/</id>
    <published>2026-08-12T00:00:00+09:00</published>
    <updated>2026-08-12T00:00:00+09:00</updated>
    <summary>1인칭 팔뚝은 거의 전부 카메라 근평면 뒤에 있습니다. 기하는 매번 맞았는데 그려낼 수 있는 부분이 하필 팔처럼 안 보이는 부분이었습니다. 그리고 릴은 커피 통만 했습니다.</summary>
  </entry>
  <entry>
    <title>아무도 볼 수 없는 거절은 고장과 같은 것입니다</title>
    <link href="https://ntsapp.dev/devlog/ocean-fishing-silent-refusals/" />
    <id>https://ntsapp.dev/devlog/ocean-fishing-silent-refusals/</id>
    <published>2026-08-12T00:00:00+09:00</published>
    <updated>2026-08-12T00:00:00+09:00</updated>
    <summary>&quot;버튼이 안 먹는다&quot;는 제보가 여럿 들어왔는데, 셋 다 막힌 게 아니라 막힌 이유가 안 보이는 것이었습니다. 게임은 거절 사유를 제대로 만들어 두고 아무에게도 안 보이는 곳에 적고 있었습니다.</summary>
  </entry>
  <entry>
    <title>어종 12종을 넣어 놓고 한 마리도 잡을 수 없었습니다</title>
    <link href="https://ntsapp.dev/devlog/ocean-fishing-twelve-species/" />
    <id>https://ntsapp.dev/devlog/ocean-fishing-twelve-species/</id>
    <published>2026-08-12T00:00:00+09:00</published>
    <updated>2026-08-12T00:00:00+09:00</updated>
    <summary>표를 채우지 않아서 루어의 매력도가 전부 0으로 조회됐고, 매력도 0이면 물고기가 즉시 떠납니다. 참돔도 감성돔도 돌돔도 우럭도 이론상의 존재였습니다. 확인하려고 만든 시뮬레이터는 처음에 제 잘못된 가정 때문에 전부 0을 뱉었습니다.</summary>
  </entry>
  <entry>
    <title>&quot;\&quot;몇몇만 총을 쏜다\&quot; — 실제로 그랬습니다&quot;</title>
    <link href="https://ntsapp.dev/devlog/furball-rush-firing-line/" />
    <id>https://ntsapp.dev/devlog/furball-rush-firing-line/</id>
    <published>2026-08-11T00:00:00+09:00</published>
    <updated>2026-08-11T00:00:00+09:00</updated>
    <summary>무리가 200마리든 20마리든 화면에서 총을 쏘는 건 한 마리처럼 보였습니다. 발사가 한 번에 한 발이었고 쏘는 놈을 무작위로 뽑았기 때문입니다. 고치면서 인원수와 무기를 서로 다른 축으로 갈라 놓았습니다.</summary>
  </entry>
  <entry>
    <title>캐시가 옛 판을 보여준 게 아니라, 게임을 아예 못 뜨게 했습니다</title>
    <link href="https://ntsapp.dev/devlog/furball-rush-service-worker/" />
    <id>https://ntsapp.dev/devlog/furball-rush-service-worker/</id>
    <published>2026-08-11T00:00:00+09:00</published>
    <updated>2026-08-11T00:00:00+09:00</updated>
    <summary>서비스워커가 모든 요청에 &quot;일단 캐시부터&quot; 정책을 쓰고 있었습니다. HTML 껍데기에는 그게 위험합니다. 껍데기는 해시가 붙은 번들 이름을 가리키는데 배포는 옛 해시를 지우기 때문입니다.</summary>
  </entry>
  <entry>
    <title>&quot;\&quot;이게 물고기냐\&quot; — 돌고래가 흰 물고기로 보인 이유 셋&quot;</title>
    <link href="https://ntsapp.dev/devlog/three-ocean-fish/" />
    <id>https://ntsapp.dev/devlog/three-ocean-fish/</id>
    <published>2026-08-11T00:00:00+09:00</published>
    <updated>2026-08-11T00:00:00+09:00</updated>
    <summary>물고기를 넣었더니 돌고래가 그냥 흰 물고기였습니다. 지느러미가 두께 0이었고, 몸통 만드는 방식이 주둥이 있는 형태를 못 만들었고, 광택이 너무 세서 무늬를 통째로 지우고 있었습니다. 물고기가 오직 물을 통해서만 보인다는 사실이 나머지 설계를 거의 다 정했습니다.</summary>
  </entry>
  <entry>
    <title>물 밑을 상수로 칠하고 있었습니다 — 굴절 패스를 넣자 숨어 있던 것들이 드러났습니다</title>
    <link href="https://ntsapp.dev/devlog/three-ocean-refraction/" />
    <id>https://ntsapp.dev/devlog/three-ocean-refraction/</id>
    <published>2026-08-11T00:00:00+09:00</published>
    <updated>2026-08-11T00:00:00+09:00</updated>
    <summary>수면 아래를 노이즈 섞은 상수 색으로 칠하고 있었습니다. 실제 지형을 굴절시켜 비추도록 바꾸자 물이 가려 주던 결함이 둘 나왔습니다. 그리고 흰 면의 원인을 여섯 번 오진하게 만든 건 렌더링이 아니라 제 검증 도구였습니다.</summary>
  </entry>
  <entry>
    <title>쇄파선은 해변의 성질이 아니라 바다의 성질입니다</title>
    <link href="https://ntsapp.dev/devlog/three-ocean-shore/" />
    <id>https://ntsapp.dev/devlog/three-ocean-shore/</id>
    <published>2026-08-11T00:00:00+09:00</published>
    <updated>2026-08-11T00:00:00+09:00</updated>
    <summary>파도가 부서지는 선을 섬 둘레의 고정된 원으로 잡으면 강풍에서 모래 위에 파도가 부서집니다. 파도는 자기 파고에 견줄 만한 수심에서 부서지므로 그 선은 바다가 정합니다. 그리고 배에는 지형 충돌이 아예 없어서 섬을 뚫고 지나가고 있었습니다.</summary>
  </entry>
  <entry>
    <title>배가 6.5노트밖에 못 나가던 이유 — 흔들림을 잡던 항이 전진까지 잡고 있었습니다</title>
    <link href="https://ntsapp.dev/devlog/three-ocean-speed/" />
    <id>https://ntsapp.dev/devlog/three-ocean-speed/</id>
    <published>2026-08-11T00:00:00+09:00</published>
    <updated>2026-08-11T00:00:00+09:00</updated>
    <summary>파도에서 배가 덜 흔들리게 하려고 넣은 항력이 전체 저항의 92%였습니다. 아래위 흔들림 기준으로 크기를 잡은 값을 전 방향에 똑같이 걸었으니 앞으로 가는 것도 그만큼 막혔습니다. 속도를 풀자 느릴 땐 닿지 않던 결함 둘이 드러났습니다.</summary>
  </entry>
  <entry>
    <title>처치 수는 그대로인데 손맛만 바뀌는 값이 있었습니다</title>
    <link href="https://ntsapp.dev/devlog/tiny-knight-rush-trash-mobs/" />
    <id>https://ntsapp.dev/devlog/tiny-knight-rush-trash-mobs/</id>
    <published>2026-08-11T00:00:00+09:00</published>
    <updated>2026-08-11T00:00:00+09:00</updated>
    <summary>잡몹이 시원하게 안 죽는다는 요청에 일반 몹 체력만 70%로 낮췄습니다. 같은 시간의 처치 수는 거의 그대로입니다. 처치 속도가 아니라 등장 속도가 상한이기 때문이고, 실제로 바뀌는 건 한 마리당 때리는 횟수입니다.</summary>
  </entry>
  <entry>
    <title>겹침 0쌍은 거짓말이었습니다 — 검사가 드럼통을 아예 못 보고 있었습니다</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-blind-check/" />
    <id>https://ntsapp.dev/devlog/fps-arena-blind-check/</id>
    <published>2026-08-10T00:00:00+09:00</published>
    <updated>2026-08-10T00:00:00+09:00</updated>
    <summary>며칠 전 &quot;여섯 맵 모두 겹침 0쌍&quot;이라고 적었습니다. 제보 스크린샷에는 드럼통이 파란 방벽에 박혀 있었습니다. 검사가 통과한 게 아니라, 검사 대상에서 드럼통 열두 개가 통째로 빠져 있었습니다.</summary>
  </entry>
  <entry>
    <title>되감기를 만들어 놓고 어디에도 연결하지 않았습니다</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-lag-compensation/" />
    <id>https://ntsapp.dev/devlog/fps-arena-lag-compensation/</id>
    <published>2026-08-10T00:00:00+09:00</published>
    <updated>2026-08-10T00:00:00+09:00</updated>
    <summary>지연보상 코드는 진작 있었는데 부르는 곳이 테스트 한 군데뿐이었습니다. 실제 게임은 모든 사격을 &quot;지금&quot;으로 판정하고 있었습니다. 연결하고 나서도 총알이 통과했는데, 원인은 Godot이 변환을 다음 물리 스텝으로 미루기 때문이었습니다.</summary>
  </entry>
  <entry>
    <title>&quot;\&quot;어쩌다가 만나지기도 함\&quot; — 이 한 줄이 원인을 알려 줬습니다&quot;</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-map-sync/" />
    <id>https://ntsapp.dev/devlog/fps-arena-map-sync/</id>
    <published>2026-08-10T00:00:00+09:00</published>
    <updated>2026-08-10T00:00:00+09:00</updated>
    <summary>멀티 방에 들어가면 아무도 안 보이고, 어떤 사람은 무한 데스에 걸렸습니다. 증상은 둘인데 원인은 하나였습니다. 각자 맵을 따로 뽑고 있었고, 6분의 1 확률로 같은 맵일 때만 실제로 만나졌습니다.</summary>
  </entry>
  <entry>
    <title>서버가 판정을 안 합니다 — 봇전을 온라인 멀티로 붙인 구조</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-online-multiplayer/" />
    <id>https://ntsapp.dev/devlog/fps-arena-online-multiplayer/</id>
    <published>2026-08-10T00:00:00+09:00</published>
    <updated>2026-08-10T00:00:00+09:00</updated>
    <summary>기반 공사만 해 두고 미뤄 뒀던 온라인 멀티플레이를 실제로 연결했습니다. 서버는 중계만 하고 판정은 접속한 사람 중 하나가 전부 돌립니다. 서버에 권위를 주려면 같은 게임을 자바스크립트로 한 번 더 만들어야 했기 때문입니다.</summary>
  </entry>
  <entry>
    <title>소품에 실루엣이 생기자 숨어 있던 겹침이 드러났습니다</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-props-and-space/" />
    <id>https://ntsapp.dev/devlog/fps-arena-props-and-space/</id>
    <published>2026-08-10T00:00:00+09:00</published>
    <updated>2026-08-10T00:00:00+09:00</updated>
    <summary>드럼통과 컨테이너를 블렌더 스크립트로 구워 얹었습니다. 판정은 그대로 상자로 두고 겉모습만 바꿨는데, 모양이 생기니까 배관이 건물 한복판에 묻혀 있던 게 눈에 보였습니다. 전부 원래부터 있던 것들이었습니다.</summary>
  </entry>
  <entry>
    <title>소리가 나다 말다 하던 것 — 옆자리가 비어 있는데도 남의 소리를 뺏었습니다</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-voice-pool/" />
    <id>https://ntsapp.dev/devlog/fps-arena-voice-pool/</id>
    <published>2026-08-10T00:00:00+09:00</published>
    <updated>2026-08-10T00:00:00+09:00</updated>
    <summary>여덟 명이 붙으면 총성이 뚝뚝 끊겼습니다. 소리를 내는 자리를 순서대로 돌려쓰고 있었는데, 비어 있는 자리를 건너뛰지 않고 순서가 된 자리를 그냥 뺏었습니다. 아직 울리는 중인 총성이 그대로 잘렸습니다.</summary>
  </entry>
  <entry>
    <title>화면이 하늘로 뒤집히던 것 — 브라우저가 준 숫자를 그냥 믿고 있었습니다</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-web-input/" />
    <id>https://ntsapp.dev/devlog/fps-arena-web-input/</id>
    <published>2026-08-10T00:00:00+09:00</published>
    <updated>2026-08-10T00:00:00+09:00</updated>
    <summary>웹에서 시점이 갑자기 하늘로 튀고, 마우스가 화면 밖으로 나가고, 키가 눌린 채 굳었습니다. 넷 다 원인이 달랐지만 공통점이 하나 있었습니다. 브라우저가 알려 주는 값을 검사 없이 믿고 있었다는 것입니다.</summary>
  </entry>
  <entry>
    <title>봇이 계단을 안 오른 게 아니라, 계단이 벽에 처박혀 있었다</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-high-ground-prone/" />
    <id>https://ntsapp.dev/devlog/fps-arena-high-ground-prone/</id>
    <published>2026-08-06T00:00:00+09:00</published>
    <updated>2026-08-06T00:00:00+09:00</updated>
    <summary>교전 중에도 높은 자리를 잡게 하고 포복을 넣었습니다. 그 과정에서 계단 세 개가 애초에 못 올라가는 물건이었다는 걸 알았습니다. 하나는 몇 주째 그 상태였습니다.</summary>
  </entry>
  <entry>
    <title>이동 7/7 · 생존 7 · 발사 0 — 지표가 전부 초록인 죽은 맵</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-ship-no-shots/" />
    <id>https://ntsapp.dev/devlog/fps-arena-ship-no-shots/</id>
    <published>2026-08-06T00:00:00+09:00</published>
    <updated>2026-08-06T00:00:00+09:00</updated>
    <summary>화물선 맵에서 20초 동안 총알이 한 발도 안 나갔습니다. 봇은 다 살아 있었고 다 움직이고 있었습니다. 제가 보고 있던 지표로는 이 고장이 절대 안 보였습니다.</summary>
  </entry>
  <entry>
    <title>봇을 측면으로 돌게 했더니 아무도 못 맞혔다</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-squad-ai/" />
    <id>https://ntsapp.dev/devlog/fps-arena-squad-ai/</id>
    <published>2026-08-06T00:00:00+09:00</published>
    <updated>2026-08-06T00:00:00+09:00</updated>
    <summary>봇 일곱이 각자 놀던 걸 분대로 묶었습니다. 정보를 공유하고 역할을 나누게 하자 곧바로 명중률이 25%에서 7%로 떨어졌습니다. 전술을 추가할 때는 그게 기존 규칙과 어떻게 곱해지는지를 먼저 봤어야 했습니다.</summary>
  </entry>
  <entry>
    <title>게임은 멀쩡했고 내 테스트가 틀렸다 — 세 번 연속으로</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-test-was-wrong/" />
    <id>https://ntsapp.dev/devlog/fps-arena-test-was-wrong/</id>
    <published>2026-08-06T00:00:00+09:00</published>
    <updated>2026-08-06T00:00:00+09:00</updated>
    <summary>폭파 모드를 넣고 검증했더니 같은 맵에서 성공과 실패가 섞여 나왔습니다. 원인을 세 번 짚었고 세 번 다 틀렸습니다. 셋 다 게임이 아니라 테스트 쪽 문제였습니다.</summary>
  </entry>
  <entry>
    <title>체력이 아니라 팔이 깎인다 — 부위 파괴를 실제로 켜지게 만든 것</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-limb-damage/" />
    <id>https://ntsapp.dev/devlog/fps-arena-limb-damage/</id>
    <published>2026-08-04T00:00:00+09:00</published>
    <updated>2026-08-04T00:00:00+09:00</updated>
    <summary>FPS Arena는 맞은 자리가 블럭째 떨어져 나갑니다. 그런데 처음 만든 규칙으로는 그 시스템이 20초에 한 번도 발동하지 않았습니다. 팔다리 체력을 몸 체력에서 떼어내고 나서야 게임이 됐습니다.</summary>
  </entry>
  <entry>
    <title>폰에서는 만지기만 해도 총이 나갔다 — 모바일 조작을 뜯어고친 기록</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-mobile-controls/" />
    <id>https://ntsapp.dev/devlog/fps-arena-mobile-controls/</id>
    <published>2026-08-04T00:00:00+09:00</published>
    <updated>2026-08-04T00:00:00+09:00</updated>
    <summary>조이스틱을 끌면 총이 계속 발사되고, 버튼을 탭하면 화면이 돌고, 글씨는 작아서 안 보였습니다. 원인 셋이 다 달랐고, 공통점은 제가 모바일 화면을 한 번도 안 봤다는 것이었습니다.</summary>
  </entry>
  <entry>
    <title>웹에 올리면서 네 번 데인 것 — 37MB wasm, 사라지는 헤더, 안 바뀌는 캐시, 없는 글자</title>
    <link href="https://ntsapp.dev/devlog/fps-arena-web-deploy-traps/" />
    <id>https://ntsapp.dev/devlog/fps-arena-web-deploy-traps/</id>
    <published>2026-08-04T00:00:00+09:00</published>
    <updated>2026-08-04T00:00:00+09:00</updated>
    <summary>FPS Arena를 브라우저에서 돌게 만드는 과정에서 걸린 함정들입니다. 전부 &quot;빌드는 성공했는데 화면이 틀린&quot; 종류였고, 하나는 배포한 뒤에도 한참 동안 원인을 못 찾았습니다.</summary>
  </entry>
  <entry>
    <title>털뭉이 러시 안내서 — 머릿수가 곧 화력이고 동시에 목숨이다</title>
    <link href="https://ntsapp.dev/devlog/furball-rush-how-to-play/" />
    <id>https://ntsapp.dev/devlog/furball-rush-how-to-play/</id>
    <published>2026-08-03T00:00:00+09:00</published>
    <updated>2026-08-03T00:00:00+09:00</updated>
    <summary>무리는 알아서 달리고 알아서 쏩니다. 플레이어가 하는 일은 관문에서 어느 칸으로 지나갈지 고르는 것 하나뿐입니다. 그 하나가 왜 계속 어려운지, 그리고 화력이 왜 머릿수에 정비례하지 않는지 정리했습니다.</summary>
  </entry>
  <entry>
    <title>만나도 좋고 대화만 해도 좋고, 벙개벙개의 부담 없는 거리</title>
    <link href="https://ntsapp.dev/devlog/bungae-bungae-flow/" />
    <id>https://ntsapp.dev/devlog/bungae-bungae-flow/</id>
    <published>2026-07-31T00:00:00+09:00</published>
    <updated>2026-07-31T00:00:00+09:00</updated>
    <summary>혼자 하는 게 따분해질 때 근처의 비슷한 사람과 이어지는 앱입니다. 만남을 강요하지 않고, 솔직한 평가를 남길 수 있게 하고, 대화방에 가장 많은 공을 들였습니다.</summary>
  </entry>
  <entry>
    <title>다녀온 자리를 기억이 아니라 기록으로, 낚시일기를 만든 이유</title>
    <link href="https://ntsapp.dev/devlog/fishing-diary-origin/" />
    <id>https://ntsapp.dev/devlog/fishing-diary-origin/</id>
    <published>2026-07-31T00:00:00+09:00</published>
    <updated>2026-07-31T00:00:00+09:00</updated>
    <summary>낚시는 자주 갔는데 어디가 좋았는지는 늘 기억에만 있었습니다. 기억은 지워지니까 기록을 남기기로 했고, 그 기록이 쌓이면서 다음 출조지를 고르는 통계가 됐습니다.</summary>
  </entry>
  <entry>
    <title>운영자는 둘인데 참가자는 백 명, 공정성을 앱에 맡기기</title>
    <link href="https://ntsapp.dev/devlog/fishing-tournament-platform-flow/" />
    <id>https://ntsapp.dev/devlog/fishing-tournament-platform-flow/</id>
    <published>2026-07-31T00:00:00+09:00</published>
    <updated>2026-07-31T00:00:00+09:00</updated>
    <summary>낚시 대회는 공정성이 생명인데 그걸 지켜볼 사람 수는 정해져 있습니다. 대회장 이탈, 조과물 진위, 실시간 순위를 앱이 대신 보게 만든 이야기입니다.</summary>
  </entry>
  <entry>
    <title>강철궤도 안내서 — 열차는 멈추지 않고, 당신은 한 칸에만 있을 수 있다</title>
    <link href="https://ntsapp.dev/devlog/iron-rail-how-to-play/" />
    <id>https://ntsapp.dev/devlog/iron-rail-how-to-play/</id>
    <published>2026-07-31T00:00:00+09:00</published>
    <updated>2026-07-31T00:00:00+09:00</updated>
    <summary>달리는 열차 지붕 위를 뛰어다니며 막는 게임입니다. 규칙은 하나뿐이고 조작은 둘뿐인데, 그 둘이 계속 서로를 방해합니다. 처음 타는 분을 위해 무엇을 보고 무엇을 고르면 되는지 정리했습니다.</summary>
  </entry>
  <entry>
    <title>블록깨기와 테트리스를 붙인 대전 게임, 그리고 첫 Unity</title>
    <link href="https://ntsapp.dev/devlog/liquid-pvp-design/" />
    <id>https://ntsapp.dev/devlog/liquid-pvp-design/</id>
    <published>2026-07-31T00:00:00+09:00</published>
    <updated>2026-07-31T00:00:00+09:00</updated>
    <summary>LiquidPvP는 블록깨기 형태의 대전 테트리스입니다. 제가 Unity로 처음 만든 프로젝트이기도 해서, 게임 규칙만큼이나 엔진에 익숙해지는 일이 함께 걸려 있었습니다.</summary>
  </entry>
  <entry>
    <title>건물 안에 들어갔는데 할 게 없다면, 그 문은 왜 열었나</title>
    <link href="https://ntsapp.dev/devlog/little-city-story-interior-minigames/" />
    <id>https://ntsapp.dev/devlog/little-city-story-interior-minigames/</id>
    <published>2026-07-31T00:00:00+09:00</published>
    <updated>2026-07-31T00:00:00+09:00</updated>
    <summary>Little City Story의 방문 가능한 실내 25곳 전부에 미니게임을 붙였습니다. 게임 34종에 메커닉 8종, 채점은 전부 서버가 합니다. 하루 만에 끝낸 작업이 아니라 하루 만에 구멍을 메운 작업입니다.</summary>
  </entry>
  <entry>
    <title>적이 지금 뭘 아는지 안 보이면 그건 잠입이 아니라 운이다</title>
    <link href="https://ntsapp.dev/devlog/save-private-dot-enemy-minds/" />
    <id>https://ntsapp.dev/devlog/save-private-dot-enemy-minds/</id>
    <published>2026-07-31T00:00:00+09:00</published>
    <updated>2026-07-31T00:00:00+09:00</updated>
    <summary>도트 일병 구하기의 적은 자기가 아는 것을 말합니다. 느낌표와 물음표, 말풍선, 발각 게이지로요. 병종도 여섯으로 갈라서 어느 부위를 먼저 무력화할지가 판단이 되게 했습니다.</summary>
  </entry>
  <entry>
    <title>죽이는 게 아니라 뜯어낸다 — 로봇 대전을 껍데기로 만들지 않으려고 건 것</title>
    <link href="https://ntsapp.dev/devlog/scrap-war-part-destruction/" />
    <id>https://ntsapp.dev/devlog/scrap-war-part-destruction/</id>
    <published>2026-07-31T00:00:00+09:00</published>
    <updated>2026-07-31T00:00:00+09:00</updated>
    <summary>스크랩 워는 체력이 0이 되어 죽는 게임이 아닙니다. 팔다리를 하나씩 잃다가 못 싸우게 되고, 뜯어낸 부위가 그대로 내 부품이 됩니다. 그 한 축에 전리품과 아트와 보스를 전부 물려 놓았습니다.</summary>
  </entry>
  <entry>
    <title>직접 해보게 했더니 시점부터 틀렸더라</title>
    <link href="https://ntsapp.dev/devlog/scrap-war-sidescroll-turn/" />
    <id>https://ntsapp.dev/devlog/scrap-war-sidescroll-turn/</id>
    <published>2026-07-31T00:00:00+09:00</published>
    <updated>2026-07-31T00:00:00+09:00</updated>
    <summary>스크랩 워를 쿼터뷰에서 횡스크롤로 갈아엎었습니다. &quot;컨트롤도 어렵고 총체적 난국&quot;이라는 말을 듣고 원인을 짚어 보니 조작이 아니라 카메라였습니다. 같은 날 성능도 실측해서 드로우콜을 551에서 345로 내렸습니다.</summary>
  </entry>
  <entry>
    <title>유료 데모의 소스를 뜯는 대신 논문을 읽고 바다를 다시 만들었다</title>
    <link href="https://ntsapp.dev/devlog/three-ocean-fft/" />
    <id>https://ntsapp.dev/devlog/three-ocean-fft/</id>
    <published>2026-07-31T00:00:00+09:00</published>
    <updated>2026-07-31T00:00:00+09:00</updated>
    <summary>잘 만든 바다 데모를 보고 &quot;이거 어떻게 했지&quot;가 아니라 &quot;이건 무슨 기법이지&quot;에서 시작했습니다. FFT 파랑과 JONSWAP 스펙트럼, 3단 캐스케이드로 처음부터 구현했고, 파고가 물리 공식과 맞는지 픽셀을 읽어 검증했습니다.</summary>
  </entry>
  <entry>
    <title>FFT 바다 안내서 — 슬라이더 하나가 무엇을 바꾸는지</title>
    <link href="https://ntsapp.dev/devlog/three-ocean-guide/" />
    <id>https://ntsapp.dev/devlog/three-ocean-guide/</id>
    <published>2026-07-31T00:00:00+09:00</published>
    <updated>2026-07-31T00:00:00+09:00</updated>
    <summary>브라우저에서 바다를 띄우고 풍속을 올려 보면 파고가 따라 올라갑니다. 그게 눈속임이 아니라 공식이라는 걸 확인하는 방법과, 화면에 있는 것들이 각각 무슨 뜻인지 정리했습니다.</summary>
  </entry>
  <entry>
    <title>버벅인다는 제보의 원인은 프레임률이 아니었다</title>
    <link href="https://ntsapp.dev/devlog/tiny-knight-rush-hitstop/" />
    <id>https://ntsapp.dev/devlog/tiny-knight-rush-hitstop/</id>
    <published>2026-07-31T00:00:00+09:00</published>
    <updated>2026-07-31T00:00:00+09:00</updated>
    <summary>Tiny Knight Rush가 스웜에서 끊긴다는 제보를 받고 성능을 고쳤는데 체감이 없었습니다. 재보니 게임 프레임의 43.5%가 시간이 0인 채로 지나가고 있었습니다. 렌더러는 60fps로 멀쩡히 돌고 있었고, 멈춰 있던 건 세계였습니다.</summary>
  </entry>
  <entry>
    <title>앱 일곱 개를 한 도메인에, ntsapp.dev 허브를 만든 방법</title>
    <link href="https://ntsapp.dev/devlog/building-nts-apps-hub/" />
    <id>https://ntsapp.dev/devlog/building-nts-apps-hub/</id>
    <published>2026-07-30T00:00:00+09:00</published>
    <updated>2026-07-30T00:00:00+09:00</updated>
    <summary>마크업이 두 벌 있으면 반드시 어긋납니다. 단일 마크업 소스, 쓰인 글자만 굽는 한글 폰트 서브셋, 내용 해시 파일명까지, 이 사이트 자체를 만든 기술적 결정들을 기록합니다.</summary>
  </entry>
  <entry>
    <title>도시가 살아 있어 보이는 이유, 인구 구조가 거리를 만든다</title>
    <link href="https://ntsapp.dev/devlog/little-city-story-living-city/" />
    <id>https://ntsapp.dev/devlog/little-city-story-living-city/</id>
    <published>2026-07-30T00:00:00+09:00</published>
    <updated>2026-07-30T00:00:00+09:00</updated>
    <summary>Little City Story의 거리 풍경은 장식이 아닙니다. 어린이부터 노년까지의 인구 코호트가 시간대별로 누가 어디로 걷는지를 정하고, 이사와 등교와 진료소 방문이 실제 인구 흐름에서 나옵니다.</summary>
  </entry>
  <entry>
    <title>25MiB 제한 너머로, Godot 도시 게임을 브라우저에 올리기</title>
    <link href="https://ntsapp.dev/devlog/little-city-story-web-release/" />
    <id>https://ntsapp.dev/devlog/little-city-story-web-release/</id>
    <published>2026-07-30T00:00:00+09:00</published>
    <updated>2026-07-30T00:00:00+09:00</updated>
    <summary>Little City Story의 WebAssembly 런타임은 파일 하나가 Cloudflare의 업로드 한도를 넘습니다. 큰 파일을 쪼개 원래 주소로 이어 붙이는 Worker를 만들어 ntsapp.dev/city 에서 설치 없이 돌아가게 만든 과정입니다.</summary>
  </entry>
  <entry>
    <title>발각을 도박이 아니게 만들기, 잠입 규칙의 설계</title>
    <link href="https://ntsapp.dev/devlog/save-private-dot-stealth-rules/" />
    <id>https://ntsapp.dev/devlog/save-private-dot-stealth-rules/</id>
    <published>2026-07-30T00:00:00+09:00</published>
    <updated>2026-07-30T00:00:00+09:00</updated>
    <summary>도트 일병 구하기의 적은 시야 원뿔로 봅니다. 어디까지 붙어도 되는지를 감이 아니라 화면으로 판단하게 만들고, 들킨 뒤에도 게임이 계속되게 만든 규칙들을 정리했습니다.</summary>
  </entry>
  <entry>
    <title>지형이 작전을 정한다, 매 판 새로 만들어지는 적진</title>
    <link href="https://ntsapp.dev/devlog/save-private-dot-terrain-insertion/" />
    <id>https://ntsapp.dev/devlog/save-private-dot-terrain-insertion/</id>
    <published>2026-07-30T00:00:00+09:00</published>
    <updated>2026-07-30T00:00:00+09:00</updated>
    <summary>밀림에는 헬기로, 사막에는 트럭으로, 강 삼각주에는 반잠수정으로 들어갑니다. 도트 일병 구하기의 지형 5종과 절차 생성이 판마다 다른 침투 계획을 만드는 방법입니다.</summary>
  </entry>
  <entry>
    <title>이동하는 엄지를 방해하지 않는 HUD, 원형 액션 허브</title>
    <link href="https://ntsapp.dev/devlog/tiny-knight-rush-action-hub-hud/" />
    <id>https://ntsapp.dev/devlog/tiny-knight-rush-action-hub-hud/</id>
    <published>2026-07-30T00:00:00+09:00</published>
    <updated>2026-07-30T00:00:00+09:00</updated>
    <summary>Tiny Knight Rush는 끌어서 이동하는 게임입니다. 그런데 버튼을 누르려면 이동을 멈춰야 했습니다. 무기는 상단 바로, 스킬과 소모품은 초상화 둘레의 호로 옮긴 HUD 재설계 이야기입니다.</summary>
  </entry>
  <entry>
    <title>보스전에 결계를 친 이유, 그리고 스킬도 못 쓰고 죽던 보스</title>
    <link href="https://ntsapp.dev/devlog/tiny-knight-rush-boss-barrier/" />
    <id>https://ntsapp.dev/devlog/tiny-knight-rush-boss-barrier/</id>
    <published>2026-07-30T00:00:00+09:00</published>
    <updated>2026-07-30T00:00:00+09:00</updated>
    <summary>Tiny Knight Rush의 보스는 잡몹 스웜에 묻혀 보이지도 않았고, 강화가 쌓인 계정 앞에서는 첫 스킬을 쓰기도 전에 죽었습니다. 결계 설계와 계측 기반 밸런스 조정의 기록입니다.</summary>
  </entry>
</feed>
