Communitygithub.com

IAmCosmin-YT/emotion-factory-devlog-shorts

Construisez, réparez et faites la promotion du jeu Roblox Emotion Tycoon via Studio MCP et Blender : vos règles maison, IDs d'assets, IDs de passes, pièges connus et la recette automatisée de vidéo promo.

Qu'est-ce que emotion-factory-devlog-shorts ?

Ce skill est un contrat de travail et un manuel de jeu complet pour le jeu Roblox 'Emotion Tycoon', destiné à un développeur solo ('Squashed Studios', ID 706695552) qui utilise Studio MCP et Blender. Il agit comme un guide de style maison strict, définissant des règles comme le respect des modifications manuelles, l'interdiction d'UI 'vibecodée' ou générée par IA, et des directives de conception spécifiques (ex. mise en page des fenêtres, textures au sol, utilisation d'une police privée pour le glyphe Robux). L'utilisateur privilégie ses propres assets faits main (listés avec IDs) et rejette les alternatives générées automatiquement. La partie technique détaille le workflow avec Studio MCP, les pièges de développement Roblox (comme le cache `require`, le décalage des coordonnées FBX, les limites de registres Luau) et la structure du jeu (configuration partagée, gestion des sessions, arbres de compétences). Enfin, le skill fournit un plan de production vidéo entièrement automatisé pour créer des vidéos promotionnelles, utilisant le Studio et la Game Bar de Windows, avec des séquences de caméra scriptées et le déclenchement d'événements in-game. Il couvre également la monétisation, les passes de jeu, les IDs de produits, et la gestion des états de test sans affecter les données réelles.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/IAmCosmin-YT/emotion-factory-devlog-shorts/tree/HEAD/extracted_skills/emotion-tycoon-dev/emotion-tycoon-dev

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Emotion Tycoon — accord de travail et manuel de jeu

Utilisez ceci à chaque fois que l'utilisateur mentionne Emotion Tycoon, ses arbres, travailleurs, distributeurs, boosts, événements, étages, emplacements de sauvegarde, passes de jeu, raids, codes, le panneau d'administration, ou demande des icônes, des particules, de l'interface utilisateur, des modèles, des vignettes ou une vidéo promotionnelle pour cela — même s'ils ne décrivent qu'un symptôme ("l'arbre est bloqué", "les particules semblent petites", "je suis coincé avec 0$").

L'utilisateur est un développeur Roblox solo (groupe "Squashed Studios", id 706695552) qui dessine à la main une grande partie de l'art et est exigeant sur tout ce qui a l'air "vibecodé" ou généré par IA. Tout ce qui suit provient de ses propres corrections ; traitez-le comme leur style maison, pas une suggestion. Ils envoient souvent de longues séries de requêtes dictées vocalement : transformez chaque série en une liste de tâches, corrigez d'abord les bugs rapides, et répondez à chaque élément dans le rapport final (y compris ceux que vous avez décidé de ne pas faire).

Les règles permanentes de l'utilisateur

  • Respectez leurs modifications. Ne remplacez jamais les modifications de modèle/UI faites par l'utilisateur à la main. Lisez avant d'écrire.
  • Pas d'UI qui a l'air IA. Pas d'étiquettes/puces/badges de texte ("PASS", "NEW", "HOT"), pas de pilules dégradées brillantes plaquées sur des choses, pas d'icônes chevauchant des champs de texte, pas de lignes de texte flottantes simples expliquant des choses. Distinguez les choses par la disposition, le style de contour, la couleur ou le regroupement.
  • Nouvelles fenêtres : clonez une fenêtre que l'utilisateur a déjà approuvée (disposition à deux colonnes de HUD.FriendModal, RebirthModal, OfflineModal) et échangez son contenu, au lieu d'en composer une à partir de zéro. Une fenêtre faite de zéro a été rejetée comme "visiblement faite avec l'IA". Champs de texte = boîte blanche encastrée avec le contour foncé de 3px, texte foncé.
  • Les nombres que le joueur possède ressemblent à la barre d'argent. Par exemple, Jetons de Raid = un clone de HUD.Cash à côté avec l' icône de jeton, survol (PC) / appui (téléphone) pour une infobulle. Assurez-vous toujours que les infos de survol fonctionnent sur mobile (l'appui bascule).
  • Véritable texture de stud pour les fonds d'UI : rbxassetid://100839690373358 (jamais une texture procédurale).
  • Utilisez d'abord leurs assets faits main (IDs ci-dessous). Ne générez pas de remplacements quand l'un des leurs existe.
  • Terminez chaque réponse qui ajoute des visuels par une courte liste d'assets qu'ils pourraient dessiner pour remplacer les espaces réservés.
  • Le glyphe Robux est le caractère à usage privé U+E002.
  • Ne délirez pas. Cherchez sur le web / lisez le code en cas de doute sur une API ou un ID.
  • N'ouvrez pas une deuxième instance de Roblox Studio. L'utilisation de l'ordinateur est réservée aux choses que MCP ne peut pas faire (import FBX, Game Bar).
  • Ne sauvegardez jamais leur fichier .blend (C:\Users\cosul\Desktop\models_for_roblox\RobloxTycoon.blend) ; rappelez-leur de faire Ctrl+S.
  • Modèles 3D dans Blender: basés sur des modificateurs, low-poly propres, ombrage plat ; engrenage dans le style du kit /roblox-r6-armor.
  • Pas de récompenses quotidiennes (ils préfèrent les gains hors ligne/AFK). Gardez les hexagones "?" mystères partout — quand un "?" devient un nœud réel, ajoutez de nouveaux hexagones "?" au-delà.
  • Décidé / rejeté (ne pas re-proposer) : protection de base, saut de renaissance, "Améliorer Tout" (seulement un bouton Max par PNJ), une boutique de cosmétiques, un arbre Trophée (les Jetons de Raid restent ; gagnés par le top 3 quotidien des renaissances + chaque 5ème renaissance). Machine Météo = exactement 1 par parcelle. Tutoriel de synergie : en attente jusqu'à ce qu'ils demandent.
  • Ne laissez jamais un joueur se retrouver complètement bloqué. Tout changement de coûts/arbres/renaissance doit garder un chemin vers une ligne fonctionnelle (Main a lineCost + l'appoint rescue et une garde d'Arbre d'Argent — gardez-les fonctionnels).

Workflow Studio MCP

  • L'id Studio change à chaque session — obtenez-le avec list_roblox_studios.
  • Le datamodel en édition est indisponible en mode Lecture. L'utilisateur teste lui-même : vérifiez get_studio_state ; pendant qu'ils jouent, vous pouvez encore LIRE les scripts via le datamodel Serveur (game.ServerScriptService.Main.Source). Attendez-les (interrogez toutes les quelques minutes) ; arrêtez leur test de jeu seulement s'ils sont inactifs depuis des minutes, et dites-le. S'ils demandent "vérifie que les choses sont sauvegardées" : les modifications ne persistent que lorsqu'elles sont faites en Édition.
  • execute_luau dans Client/Serveur a son propre cache require : require(module) là est une copie fraîche, pas celle qui tourne (le monkey-patching ne fait rien). Accédez à l'état en cours via les remotes du jeu (ReplicatedStorage.Remotes.Request:InvokeServer(action, ...), incluant les opérations admin) ou les instances/attributs. Pour tester les modifications de Config en mode Édition, require(Config:Clone()).
  • Modifications de scripts : ScriptEditorService:UpdateSourceAsync via execute_luau, recherche/remplacement exact avec string.find(src, old, 1, true) et affirmez que la correspondance est unique. Utilisez les chaînes [==[ ]==] (le code contient souvent ]]).
  • La fonction de démarrage du module UI est à la limite des 200 registres locaux de Luau ("Out of local registers"). N'ajoutez jamais de nouvelles variables locales de haut niveau là : mettez les nouveaux états/fonctions sur la table partagée ext ou à l'intérieur de blocs do ... end.
  • Pour tester un état rare (par exemple une ligne pleine), changez temporairement une constante Config en mode Édition, testez le jeu, puis revenez en arrière.
  • Vérifiez en jouant avec ET_NoSave : start_stop_play, screen_capture, get_console_output. user_mouse_input x/y sont des coordonnées GUI/écran : pour un point monde utilisez WorldToScreenPoint (= viewport y - 58) ; pour UI utilisez AbsolutePosition. Les captures d'écran sont mises à l'échelle (~0.955 du viewport 2011px). textInput dans une TextBox ne l'atteint pas — testez plutôt les flux de type échange via la remote.
  • Les DataStores dans Studio sont les VRAIS (accès API activé) : tout ce que vous écrivez pendant le test (par exemple des codes de test) doit être supprimé ensuite.

Carte du jeu (où se trouvent les choses)

  • ReplicatedStorage.Shared.Config — tout le réglage : Objets, Employés, Avantages, Matériaux, Événements, Robux, RobuxClusters, Thèmes, TreePaths/TreeLayout/RebirthLayout, AURA (qui buff/debuff quelles tuiles), CAPACITY_PERKS, MAX_LIVE_CUBES (par ligne de distributeur) / MAX_PLOT_CUBES, fonctions de la Machine Météo (weatherChance, weatherUpgradeCost = part du doublement de la prochaine renaissance par niveau, weatherRoll, weatherOwned), définitions de raid + jetons.
  • ReplicatedStorage.Shared.Grid — maths de cellule (tuiles 20x20, TILE=4). Rotation r : 0=-Z 1=+X 2=+Z 3=-X.
  • ReplicatedStorage.Shared.VFX — préréglages de particules ; VFX.burst fait un émetteur par couleur.
  • ServerScriptService.Main — sessions, handlers.* pour chaque action distante (incluant batch pour la construction par glisser, upgradeWeather, redeemCode, buyRaidToken), données de la Machine Météo (data.wm, Factory.weatherHook), sauvetage, boucle Heartbeat. pushState peut être retenu (s.holdPush) pendant un lot.
  • ServerScriptService.Server.{Factory,Plots,Shop,Events,DataService,Leaderboards,Prices,Raids,Admin,Codes}. Factory : compteurs de cubes par ligne (session.lineCount, uncount), lineCap, attribut LineFull sur les distributeurs, vérificateur de blocage segmenté (gardez-le O(n), les lignes peuvent contenir 100 cubes), Factory.hold pour les reconstructions par lots. Admin : ops réservés à l'admin (offrir en ligne/hors ligne/serveur croisé, événements, annoncer, codes). Codes : DataStore ET_Codes_v1 (clé codes + uses_<CODE>), types cash/scaled/rp/token/boost, dates, utilisations max (0 = pas de limite).
  • StarterPlayerScripts.ClientModules.{UI,Build,Cubes,Life,Boards,Aura,Pop} — UI = HUD, arbres, modales, panneau d'inspection ; Build = fantôme, placement par glisser/lot avec espaces réservés transparents, suppression par maintien du clic droit, déplacement ; Aura = les carrés de tuiles verts/rouges/jaunes. UI du panneau d'administration : ServerStorage.AdminGui (+ AdminClient), cloné seulement dans le PlayerGui des admins.
  • Les canevas d'arbre sont des nœuds créés dans StarterGui.TreeGui.Window.Pan.{Canvas,RebirthCanvas,RobuxCanvas}.Nodes (attributs Q, R, Ring, Path, Mystery). Un nouveau nœud = renommer/convertir un nœud "?" à cette cellule (supprimez Mystery, définissez Path) + ajoutez l'id à Config.TreePaths/RebirthLayout. Position : cash x = 0.4654 + 0.0691q, y = 0.6062 + 0.0850r + 0.0425q ; rebirth x = 0.5 + 0.1230q, y = 0.5 + 0.1300r + 0.0650q.
  • Remotes de développement réservées à Studio : devEvent, devCash, devRobux, devRobuxRemove, devRobuxReset, devOffline, devTutorial. Remotes d'administration (admin, op, ...) fonctionnent dans Studio pour le propriétaire (offrez rp/cash/jeton à vous-même).
  • Ne testez jamais sur la vraie sauvegarde par accident. workspace:SetAttribute("ET_NoSave", true) en mode Édition avant un test de jeu jetable, supprimez-le ensuite.

Pièges connus (chacun nous a mordu une fois)

  • Les erreurs de placement des PNJ Premium laissaient des tuiles "fantômes" → place construit à l'intérieur de pcall avec rollback ; gardez ce motif.
  • PlayerAdded fait des yield (Shop.checkPasses, chargement DataStore) : après chaque yield, vérifiez que la session est toujours actuelle, ou un joueur qui est parti voit sa parcelle reconstruite sans propriétaire. PlayerRemoving libère la parcelle AVANT la sauvegarde.
  • Un UIGradient multiplie BackgroundColor3 — une trame teal clonée avec un dégradé violet rend navy. Définissez l'arrière-plan sur blanc lors de la recoloration via le dégradé.
  • La barre d'argent a un UIScale Bump : tout ce qui est positionné à partir de son AbsoluteSize doit être divisé par cette échelle.
  • Bouton droit de la souris en mode Construction = maintien pour supprimer ; le panoramique de la caméra se fait avec le bouton du milieu / WASD.
  • Le début du glisser d'arbre doit utiliser UIS.InputBegan (les pressions de boutons n'atteignent jamais win.InputBegan).
  • Les textures de thème d'étage vont par-dessus le sol (instance Texture) ; ne changez jamais le Material du sol.
  • Les feuilles de particules de l'utilisateur sont des flipbooks 2x2 avec de petites formes → échelle Size ~2–2,5x ; multicolore = multiples émetteurs.
  • Les textures nouvellement téléchargées peuvent sembler floues pendant un certain temps (traitement Roblox).
  • Les distributeurs de haut niveau nécessitent un travail énorme par étape ; les lignes faibles se vendent pour ~1$ (valeur de cube vide).
  • Images : upload_image fonctionne depuis un serveur http local (par exemple http://127.0.0.1:8765/<fichier>).
  • Pipeline FBX : exportez depuis Blender avec use_selection=True, object_types={'MESH'}, apply_unit_scale=True, mesh_smooth_type='FACE' vers %LOCALAPPDATA%\Temp\et_export\ ; importez par utilisation de l'ordinateur (Asset Manager → Importer → taper le chemin → Importer), atterrit dans workspace.<FbxName>. L'importateur reflète X : placez les pièces avec CFrame.new(-x_b, z_b, y_b) depuis les coordonnées Blender. Rendu de prévisualisation : scène temporaire "ET_Preview" → images mises en scène.
  • Les liens externes dans le jeu ne sont pas autorisés : Discord/groupe vont sur les liens sociaux de la page du jeu ; dans le jeu seulement un bouton "Rejoindre le groupe" de GroupService:PromptJoinAsync(groupId).

Disposition de la monétisation (actuelle)

  • Boutique Robux = îles séparées entre lesquelles vous pouvez faire glisser (Config.RobuxClusters : Passes de Jeu, Travailleurs Premium, Argent, Boosts et Événements). Ajouter un pass = ajoutez son id aux items d'une île + ajoutez un hexagone dans RobuxCanvas.Nodes.
  • Les passes vs les produits sont distingués par l'île et l'animation du contour, jamais par des étiquettes.
  • Les prix sont récupérés en direct (Server.Prices → attribut ReplicatedStorage RobuxPrices).
  • IDs de Pass : HypeQueen 2026442663, DiamondWorker 2026394625, PassMidas 2025590666, PassLuck 2025848628, PassDrop 2025464639, PassVIP 2026922652, GoldenRobot 2025374681, LayoutSlot3 2026652648, LayoutSlot4 2026010654, Pass2x 2027138654.
  • IDs de Produit : OfflineDouble 3717787338, BuyBlood 3717787331, BuyMeteor 3717787319, BuyThunder 3717787307, BuyGolden 3717787299, BuyRain 3717787292, Boost3x 3717787279, Boost2x 3717787271, CashVault 3717787265, CashBag 3717787258, CashPouch 3717787249, RaidPortal 3717992673, RaidSiphon 3717992684, RaidJunk 3717992698, RaidGloom 3717992711.
  • Les étages sont des récompenses de renaissance gratuites choisies dans les Paramètres. Sauvegardes d'usine : 2 emplacements gratuits, les emplacements 3–4 sont des passes.
  • Les joueurs de fin de partie ont des sextillions et 30+ renaissances : tarifez le contenu tardif comme une part de Config.rebirthCost (échelle infinie) plutôt qu'un nombre fixe ; les codes par défaut sont "% de la prochaine renaissance" pour la même raison.

Les assets de l'utilisateur

Icônes : moneyboost3 105474801162476, moneybag 79223369019300, goldenhour 71253971041485, thunderstorm 106415624997312, moneyvault 114456854945836, moneyboost2 88658276906960, meteor 110778083355096, rain 112383447314124, coinpouch 115820638833486, faster_hoppers 85633043652627, x2coins 100838792374750, crown 89385624200044, midas_touch 108493524899149, bloodmoon_2 79508274280864, moon2 97357609209998, hammer 89643796486723, floppydisk 127943322640811, star 119578070875725, zzz 130218032337173, frost 109343690555707, raid_token 112843349186486, weather_machine 112719886234229, conveyor_full 79879060986006 (panneau ligne pleine), backpack_cubes 84466301181838 / crate_cubes 108346564955404 / chest_cubes 131689000211065 (avantages de capacité).

Étages : ocean_lights 138556700370722, holy 105026190310831, pink 83692624195325, pink_green 136148045549462, redx 124121848293779.

Particules (feuilles 2x2) : anger 97456853400445, happy_love 83569352224420, bolts 125645422252125, steam 115369146046246, confetti 108450399478144, swirls_sparkles 131593243447656, waterdrops 125415103859140, happy_confetti 103582469151146, money 128140468436252, music_notes 92525208060800, ice_shards 123359736235888.

workspace["Simulator Icon Pack"] (listez ses Decals pour les IDs) : utiles — Flèche Bas 17368169201, Codes 17368032566, MultiGifts 15402969720, Développer 17368183719, Clic 17260727409, Rocket 16670799841, Boîte 17368122337, Caisse 17368402884. CubePets 17368391613 est un CHIEN — ne l'utilisez jamais pour des choses qui ne sont pas des animaux.

Recette de vidéo promo (entièrement automatisée, aucun clic utilisateur après les premières approbations)

  1. Approbations une fois : accès par utilisation de l'ordinateur à Roblox Studio + Game Bar avec les combinaisons de touches système, et accès au dossier ~/Videos (Game Bar sauvegarde dans Videos\Captures).
  2. État de présentation : définissez ET_NoSave, démarrez le jeu, puis via la remote Request : devCash, déverrouillez chaque nœud d'arbre d'argent (boucle unlock jusqu'à ce qu'il n'y ait plus de progression), effacez la disposition, construisez 4 lignes (distributeur à x=1 r=1, convoyeurs x=2..17, vendeur x=18 ; travailleurs des deux côtés faisant face au convoyeur). Utilisez Dropper2–4 pour que les cubes se remplissent et se vendent pour des nombres réels.
  3. Directeur dans le client : BindToRenderStep à Camera+5 forçant CameraType=Scriptable et un _G.DirCF ; aides pour Hold/Move/Orbit ; basculez les ScreenGuis du HUD (pas TreeGui). Cellule→monde : X = -134 + 4x, Z = -96 + 4z pour Parcelle1. Cadrage de prévisualisation avec screen_capture avant l'enregistrement.
  4. Enregistrez : focalisez Studio, win+alt+r → exécutez le plan (execute_luau, < 60 s) → win+alt+r. Arrêtez les événements naturels avec devEvent("") entre les plans. Déclenchez les événements avec devEvent("Thunderstorm" | "MeteorShower" | "BloodMoon" | "CashRain" | "GoldenHour" | "Frost"). Vérifiez les clips avec une feuille de contact horodatée et refaites les mauvais.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

IAmCosmin-YT/emotion-factory-devlog-shorts

>- Use this skill when editing, reviewing, scripting, or programmatically generating high-retention YouTube Shorts, TikTok devlogs, and gaming promo videos in the style of Vedinad, Danidev, c dev, Wishbone Games, SSundee, or wynge. Built from a frame-by-frame forensic analysis of 81 videos across all 6 creator corpora (all 28 Vedinad Shorts + 2 devlogs, 15 Danidev devlogs/clips/shorts, 10 Wishbone Games shorts/devlogs, 14 c dev shorts/devlogs, 5 SSundee videos, and 7 viral reference shorts). Covers 60fps OpenCV/PIL frame-by-frame motion-graphics compositing, word-by-word animated comment zoom hooks, black-screen deadpan text slams, 3D perspective-tilted code/UI cards, animated stat counters, rarity ladders, browser-based human voiceover generation, and hyper-compressed audio mastering.

IAmCosmin-YT/emotion-factory-devlog-shorts

Create and revise gaming devlogs and Shorts using visually inspected creator references, natural narration, real gameplay, downloaded video effects, sourced SFX, smooth reframing, and verified exports. Use for scriptwriting, recording, asset sourcing, editing, and video critique.

IAmCosmin-YT/emotion-factory-devlog-shorts

Make vertical TikTok / YouTube Shorts promo videos for a Roblox game, end to end, by code — analyze reference shorts, record cinematic fly-throughs and real gameplay straight out of Roblox Studio, cut a kinetic motion-graphics explainer ("I let AI build my update") or a streamer-reaction meme edit (iShowSpeed-style facecam over gameplay), mix royalty-free Pixabay SFX + music with the drop on the reveal, and render covers/thumbnails. Use this whenever the user wants a short, TikTok, Reel, YouTube Short, promo, trailer, edit, meme video, thumbnail or cover for their Roblox game, asks to "make a video" about their game or update, wants Studio footage/gameplay recorded, or shares reference shorts to copy the style of — even if they never say "skill" or name a format.

Skills associés