Hwado _ Rigger

Hover over the image to see a random line of dialogue.

캐릭터
(function () { const root = document.getElementById( "interactive-character" ); if (!root || root.dataset.initialized === "true") { return; } root.dataset.initialized = "true"; const portrait = root.querySelector( ".character-portrait" ); const img = root.querySelector( ".character-image" ); const dialog = root.querySelector( ".character-dialog" ); /* ======================================== 이미지 주소 ======================================== */ const imageURLs = { default: "https://framerusercontent.com/images/hYsaoXK4sK33ttE3rKQqcNuCh1I.gif?scale-down-to=512&width=1200&height=1200", x: "https://framerusercontent.com/images/Vj9O7CW9UaPIakjdJ8QCbYC3Fk.png?scale-down-to=512&width=1200&height=1200", o: "https://framerusercontent.com/images/wCRMaXrn7kQ6bgF8w8NnXlnKY.png?scale-down-to=512&width=1200&height=1200" }; /* ======================================== X / O 랜덤 대사 ======================================== */ const dialogues = { x: [ "Illustration commissions are currently unavailable.", "The use of screen tones during model creation is prohibited.", "The use of overlay during model creation is prohibited.", "Do not consolidate all hair into a single part.", "Please assign names to all layers.", "Do not merge the left and right sides.", "Applying masks to entire folders is prohibited.", "Clean up the areas surrounding each part.", "Hidden areas must also be drawn.", "Unauthorized redistribution or resale will be subject to appropriate action.", "Reverse-engineering model runtime files to reconstruct editable source files is strictly prohibited.", "This unit dislikes bugs." ], o: [ "Multiply layer and add layer is OK.", "Separating line art and coloring is acceptable.", "For questions about part separation, asking someone experienced is the fastest solution.", "All requests are appreciated when consolidated into a single message.", "This unit is not particularly rigid. Feel free to ask questions.", "Reference materials are permitted. Their submission is not considered rude.", "This unit likes soft things.", "This unit is in good health." ] }; let lastDialogue = { x: "", o: "" }; let currentState = "default"; /* ======================================== 이미지 변경 ======================================== */ function setImage(state) { if (currentState === state) return; currentState = state; img.src = imageURLs[state]; } /* ======================================== 기본 상태 ======================================== */ function resetCharacter() { setImage("default"); dialog.textContent = ""; dialog.classList.remove("is-visible"); } /* ======================================== X / O 랜덤 선택 ======================================== */ function activateCharacter() { const state = Math.random() < 0.5 ? "x" : "o"; const list = dialogues[state]; let choices = list.filter(function (line) { return line !== lastDialogue[state]; }); if (choices.length === 0) { choices = list; } const selectedDialogue = choices[Math.floor(Math.random() * choices.length)]; lastDialogue[state] = selectedDialogue; setImage(state); dialog.textContent = selectedDialogue; dialog.classList.add("is-visible"); } /* ======================================== PC: 마우스를 올리면 활성화 ======================================== */ root.addEventListener("pointerenter", function (event) { if (event.pointerType !== "mouse") return; activateCharacter(); }); root.addEventListener("pointerleave", function (event) { if (event.pointerType !== "mouse") return; resetCharacter(); }); /* ======================================== 모바일: 캐릭터를 누르면 활성화 ======================================== */ portrait.addEventListener("click", function (event) { if ( !window.matchMedia( "(hover: none), (pointer: coarse)" ).matches ) { return; } event.stopPropagation(); activateCharacter(); }); /* 배경을 누르면 기본 상태로 복귀 */ document.addEventListener("click", function (event) { if ( !window.matchMedia( "(hover: none), (pointer: coarse)" ).matches ) { return; } if (!root.contains(event.target)) { resetCharacter(); } }); /* X / O 이미지 미리 불러오기 */ [imageURLs.x, imageURLs.o].forEach(function (url) { const preload = new Image(); preload.src = url; }); /* 최초 기본 상태 */ resetCharacter(); })();
TitleAuthorYearISBN
NameHwado  
Age???  
GenderXXX (they/them)  
TypeDemon? IDK  
-   
OccupationLive2D Rigger  
-   
SpecialistLive2D model rig  
SubLive2D Loop Animation
not interactive
  
Sub2Selling assets, pet type models.  
Sub3Live2D Illustration
I am currently not accepting commissions.
  
TitleAuthorYearISBN
Stream:Chzzk, Cime, Sometime YoutubeRigging process, chatting,
simple tutorials, drawing,
and sometimes gaming.
 
TitleAuthorYearISBN
Name:Hwado  
Age:Dec.19th. 2002  
Gender:Null (they/them)  
Height:170cm / 5.7ft  
Type:IDK What i am.  
MBTI:ISXJ  
-   
Language:Korean (Native)
Japanese (Communicative)
English (Use a translator often)
  
Like:Sleep, Deep/grayish colors,
Liminal space aesthetic, 90s-00s Tech Aesthetic
  
Dislike:Horror/spooky things, Gore, Bugs, Fish's eyes, Uncertain, Repeating sound/noise  
Good at:Live2D Facial Acting  
Bad at:Game, Go outside, Concealing Emotion