← 목록
기타 2026-07-12 4KB 읽기 4분

이모트.한선 — 감정표현/손잡기 정본

개요

스카이(구름을 향해) 스타일의 무언 감정소통(이모트·손잡기)을 위한 한선씨 정본. 게임슬라이스 프레즌스 패킷에 emote/hold 필드를 얹는 스펙과, 카탈로그 데이터(json)를 생성하는 파일.

무엇을 했는지

  1. 이모트 카탈로그 12종{id, key, label(한국어), anim(애니키), frames(지속프레임)}. 장면3D.한선과 동일한 시작()/항목()/끝() 파일쓰기 패턴으로 data/이모트.json에 생성.
- 인사(wave,60) 앉기(sit,-1=취소까지 루프) 박수(clap,90) 춤(dance,150) 웃음(laugh,80) 명상(meditate,-1) 환호(cheer,70) 절(bow,60) 생각(think,90) 하트(heart,60) 눈물(cry,80) 놀람(surprise,50)
  1. 프레즌스 state 확장 스펙 (파일 상단 주석 + 함수로 명시) — 기존 위치(x,z)/채팅(chat) 패킷에:
- emote: 현재 표출 중인 이모트 id, 0=없음 - hold: 손잡기 대상 peerId, 0=없음
  1. 판정 함수 2종:
- 이모트유효(id) — 1~12 범위검증, 참=1/거짓=-1 - 손잡기가능(내x,내z,상대x,상대z,반경) — 제곱거리 비교(루트 회피), 참=1/거짓=-1

컴파일/실행 검증

cd /Users/ef/CrownyOS/os-site/게임슬라이스
CROWNY_STRICT=1 /Users/ef/CrownyOS/crownyc/hanseonc_high 이모트.한선 > .../이모트.toau 2> .../이모트.err
  • exit=0, toau 61,544B, STRICT 경고 0건(정보로그 3줄만)
  • crownyc run 실행 결과:
  • [이모트] 카탈로그 → 이모트.json (12종)
  • 이모트유효(1)=1 / (12)=1 / (13)=-1 / (0)=-1 — 경계 정확
  • 손잡기가능(0,0,1,1,3)=1 / (0,0,10,10,3)=-1 — 근접/원거리 정확
  • data/이모트.json valid JSON(python -m json.tool 검증)
  • village.js 연동 방법 (런북, 미배선 — 신규파일만 생성 지시에 따라 라이브 파일 미접촉)

    • 송신측 send(): 로컬 상태 객체에 기존 {x, z, chat}와 같은 프레임으로 emote(현재이모트id, 기본0), hold(잡은대상 peerId, 기본0) 추가해 브로드캐스트.
    js  const state = { x, z, chat, emote: currentEmoteId || 0, hold: heldPeerId || 0 }
      
  • 수신측 peer state 렌더:
  • peer.emote != 0data/이모트.json에서 해당 id의 anim/frames를 찾아 그 시간 동안 애니메이션 재생(frames=-1은 명시적 취소 전까지 루프).
  • peer.hold != 0 이고 상호(그 대상의 hold도 나를 가리킴)일 때만 두 아바타 사이 손 연결선을 그린다. 일방 hold는 "요청 중" 표시만(수락 UX는 클라이언트 정책).
  • 근접/유효성은 클라·서버 양쪽에서 이모트유효()/손잡기가능()과 동일 규칙(제곱거리)으로 재검증 가능하도록 로직을 그대로 포팅해 쓴다(현재는 한선씨 정본 — JS 포팅 시 이 파일을 원본으로 대응 함수 작성).
  • 관련 파일

    • 정본: /Users/ef/CrownyOS/os-site/게임슬라이스/이모트.한선
    • 산출 데이터: /Users/ef/CrownyOS/os-site/게임슬라이스/data/이모트.json
    • 참조 패턴(파일쓰기 관용구 원본): /Users/ef/CrownyOS/스튜디오/장면3D.한선
    • 학습 등록: crownycode-learn.sh add "이모트_감정표현_손잡기_프레즌스확장" (별칭: 이모트)

    잔여 이슈

    • village.js 실배선(emote/hold 필드 송수신 + 렌더)은 아직 미적용 — 라이브 서비스 파일 무접촉 지시에 따라 이 문서를 런북으로 남김. 다음 세션이 village.js에 위 스펙대로 적용.
    • 손잡기 "수락" UX(상대가 명시적으로 승인 클릭할지, 근접만으로 자동 성사할지)는 정책 미확정 — 현재 함수는 근접 판정만 제공, 상호 hold 매칭은 클라이언트/서버 로직에서 조합.
    • 이모트 발동 트리거(UI 버튼/단축키)는 스코프 밖 — 카탈로그 데이터만 정본화.