code:
���i�� �X�V����
v 2.03����������������������������������������������������������
���ǉ��_���W�����A���傤�������~�b�V�����}�b�v�̈ꕔ�Ń}�b�v�̃��Z�b�g���s�\��������
�@�s��̏C��

���g��Ԉُ�ɂȂ��Ă��鎞�A�������Ă����Ԉُ�Ɂu�Ή����Ă��Ȃ��v�����X�L�����g�p�����ۂ�
�@���ۂɂ͉�������Ă��Ȃ��̂ɗ����G��������Ԃ̂��̂ɂȂ��Ă��܂��s��̏C��

v 2.02����������������������������������������������������������
����z�����A�S����@�\���A�v�f�ǉ����ɔ������Ă��Ȃ��s��̏C��

���ꕔ�̒ǉ��g�V�[���ɂāA�퓬�������ɏ����s�k�����̃V�[�����������Ă��Ȃ��s��̏C��

���ꕔ�����Y��̑����i��ǉ��@���s�k���U���o�[�R�A�A�W�̓N���A��ɍw����

���R���V�A���ꕔ�{�X�̃o�����X����

�����̑��ꕔ�p�j���̔z�u�A�ړ����蒲��

v 2.01����������������������������������������������������������
���B��ƃ_���W�����ɂāA�����`��̃G���A�ŁA�ړ��O�Ɠ����~�b�V���������������ہA
�@���j�p�̜p�j������A���傤���傪�o�����Ȃ��Ȃ�s��̏C��

������P�P�e�̃{�X�퓬���A�a�f�l�̃��[�f�B���O�G���[����������s��̏C��

���A�b�v�f�[�g�ǉ����̑Ζ����ȊO�̂g�V�[����z�����̉���t���O�~�X�̏C��

���^�C�g����ʂ̃o�[�W�����\�L�̏C��

v 2.00����������������������������������������������������������
����K�͒ǉ��A�b�v�f�[�g

��NPC�L�����N�^�[�̃T�u�C�x���g�ǉ�
�@�@�{�҂��N���A���A���̃~�b�V�������Ɂu�嗤�����R�ɏ��낤�v�ƋL���ꂽ��Ԃ̎��A
�@�@���j���[�u�˗��v�ɐV�����T�u�C�x���g���ǉ�����܂��B
�@�@�ǉ��T�u�C�x���g���ŐV�����g�V�[�����������܂��B
�@�@������̒ǉ��T�u�C�x�̓T�u�C�x���g�B�����ɂ͉e�����܂���B

���O�`�V�i���I�̒ǉ�
�@�@�{�҂��N���A���A���̃~�b�V�������Ɂu�嗤�����R�ɏ��낤�v�ƋL���ꂽ��Ԃ̎��A
�@�@���s�k���ɂ���V����NPC�Ɖ�b���邱�ƂŊO�`�V�i���I���i�s���܂��B
�@�@�V�i���I���ɂ́A�V�����g�V�[����A�V�K�����X�^�[�A�V�_���W������
�@�@�ǉ�����Ă��܂��B

���u�R���V�A���v�̒ǉ�
�@�@�O�`�V�i���I���N���A���A����̏����𖞂����Ă��鎞�A
�@�@�O���h�����r���ɂ���u�R���V�A���v�ɒ��킷�邱�Ƃ��o���܂��B
�@�@������ł́A���܂ňȏ�̗͂����ŋ��̓G�B�Ɛ키���Ƃ��ł��A
�@�@�������邱�ƂŌo���l�⃌�A�H�ށA�X�e�[�^�X�A�b�v�A�C�e�������ł��܂��B

���V�K�a�f�l�̒ǉ�
���ꕔ�X�L���̕��͈ʒu�����A���ʒ���

v 1.11����������������������������������������������������������

�����l�̋x�e���쓌�A�E���̚�̏������Ă��܂��s��̏C��
���ꕔ�m�o�b��������b��������ƕ��s�O�����Ӑ}���Ȃ����̂ɂȂ�s��̏C��
���t���C�X���b�O�̐퓬�g�u�o�b�N�v�ɂ����Ẵ��b�Z�[�W�̕s��C��
���ꕔ�X�L���̃q�b�g���A�G�������g�ω����s��̏C��
���ꕔ�X�L���̌��ʑΏۂ̕s��̏C��
���ꕔ�C�x���g���L�����N�^�[���\���s��̏C��

v 1.1����������������������������������������������������������
���͋[�퓬
�@��z�����ɂāA���j�ς������͂g�V�[���{���ς̖�����
�@�퓬���s�����Ƃ��\
�@�������Ă��o���l���͓���o���Ȃ����A�l���J�����ɂ��
�@�퓬�g�̂��˂���Ȃǂ��\

������C���t�H���[�V�����̕\�����ԉ���

���s��C����
��Gomen-HOHO�N����A���[���h�}�b�v��Ђ݂̃v���t���{����L�����Z�����A
�@�l���g�[�N�̃L�[����͂���ƃl���g�[�N���������A�t�h�������s��̏C��

���T�͈ȍ~�ňߑ��u�l�C�L�b�h�����v���莞�̃^�C�~���O�̂݁A���s�O���Ɉߑ���
�@���f����Ȃ��s��̏C��

���ꕔ��b�V�[���ŗ����G�̕\���������s��̏C��

���ꕔ�}�b�v�ɂă}�b�v�`�b�v�̏������Ă��܂��s��̏C��

���ꕔ�}�b�v�Ԃ̈ړ�����~�X�̏C��

���ꕔ�l���g�[�N���������Ȃ��s��̏C��

���T�u�N�G�X�g�u���傤�����߂āv�N���A��Ɉꗗ���������s�
�@���̎��ňꗗ��������Ă���ꍇ�Q���ڈȍ~�擾��

���ꕔ�m�o�b���C�x���g������̏�ɋ������Ă��܂��s�

�����Â̐؂�[�̕�V���ꕔ���x������ł��Ă��܂��s�

����̋u�@�l���g�[�N�\������Ȃ�

����z�����ɂă��B�l�̏����s�k�V�[���̉���s��̏C��

���ꕔ�󔠂̓���C���t�H���\������Ȃ��s��̏C��

���퓬�g�u�o�b�N(��)�v�ɂĈꕔ�ߑ��̃p���c�̐F�C��

���X�L���u���H���J�j�b�N�G���h�v�̃_���[�W�v�Z�C��

���ꕔ�뎚�A��\�L�C��

v 1.04����������������������������������������������������������
���X�L���u�R�Y�~�b�N�Q�[�g�v�̌��ʑΏۂ̕s��̏C��
���X�L���u�I�[�o�[�E�C���h�v�̌��ʑΏۂ̕s��̏C��
���X�L���u�z���C�g�J�b�^�[�v�g�p���ɕX�G�������g����������s��̏C��

���u�O�x�I�q�ɕ�炵�v�ɂāA�}�W�G�b�e�B�ɍ�������b���������
�@�˗��󒍌�̃}�W�G�b�e�B�̗����ʒu�Əd�Ȃ蓮���Ȃ��Ȃ�s��̏C��

���g��Ԉُ�u�����ۓۂ�(�D)�v���ߑ��u�l�C�L�b�h�����v�Ŕ�e������
�@�摜�G���[���o��s��̏C��

�����X�{�X��A�l���J�������g�p���g�U����U���������
�@�i���ɍU�����ꑱ���퓬���I�����Ȃ��Ȃ�s��̏C��

�����B�l�폟����s�k�g����z�ɓo�^����Ȃ�

���X�g�[���[��A�l�����s�݂̏�ԂŃl���Ɩ����Ƃ̂g�V�[����
�@��������
�@���������Ȃ��悤����

���ꕔ�����f�[�^�̒���

v 1.03����������������������������������������������������������
���S�̓I�ȓ����A�g�V�[���̂b�f���b�V�[���𑁑��肵�����ɓǂݍ��݂��x���s��̎b��I�ȏC��
�@�����Ȃǂ̃G�t�F�N�g���X�N���[������}�b�v�ŏd���Ȃ邱�Ƃ������̂�
�@�@�X�N���[����S�Ē�~�@�G�t�F�N�g�\���݂̂�
�@�@���j���[��HOHO�A�v���Ăяo���̏����̎d���𒲐�

��������P�����ɔ����ꕔ�{�^���z�u�̕ύX
�@����b�E�B���h�E��\���{�^�����uTAB�v�L�[����uCtrl�L�[�v�ɕύX
�@�@�p�b�h���쎞�̃��j���[�J���{�^���ʒu�ύX
�@�@���f�t�H���g�Ȃ�R���V���[�}�[�̃R���g���[���[(s�uX�v��p�u���v�{�^��)�̈ʒu

����z�����̃I�u�W�F�N�g�z�u�𒲐߁@�܂��A��z�������ł̔����ړ�������
�@����z�����ŃZ�[�u���Ă����ꍇ�͈�x�������o���肷�邱��

����z�����@�A�����E�l�����g��I������Ɣs�k�g���Đ������s��̏C��

�����s�k���G���A�@�������t�߂m�o�b�ƕǂ̊Ԃɓ����
�@�o���Ȃ��Ȃ�s��̏C��

���ꕔ�{�X�Ƃ̐퓬��Đ펞�A�퓬�C�x���g���X�L�b�v����Ă��܂�
�@�ꍇ�ɂ���Ă͐i�s�s�ɂȂ�s��̏C��
�@���K�v�A�C�e���̓��肪�o���Ȃ�������Ԃ̏ꍇ�A��̃{�X�Ɛ퓬��
�@�@��x�s�k���邱�Ƃŕ�U�����

���ꕔ�뎚�̏C��

���ꕔ�T�u�C�x���g�Ƀq���g�䎌�ǉ�

v 1.02����������������������������������������������������������
���v�����[�O�@��̋u�G���A�Q�ŕ󔠂𒲂ׂ���
�@����\�����������Ȃ��s��̏C��

���}�[���C�h�s�k�g���ɉ摜�G���[���o��s��̏C��

���G���t�̐X�G���A�P�@�S�u�����s�k���ɃE�L�E�c�{�g���Đ�
�@����Ă��܂��s��̏C��

���ߑ��u���[�Y�A���}�v�Ő퓬�g�u����S���v���󂯁A
�@�t�B�j�b�V�����}�����ۂɁu�c�^�S���v�̃t�B�j�b�V���摜��
�@�Ȃ��Ă��܂��s��̏C��

���X�g�[���[�C�x���g���A���O�i�X�̑��Ń~�V�F���Ƃ̃C�x���g��
�@�ēx���O�i�X�̑��ɖK���x�ɓ��C�x���g����������s��̏C��

���X�g�[���[�N���A��A�l���p���B�n�̃X�L�����g�p�s�ɂȂ��Ă���
�@���C���チ�j���[�J���퓬�J�n���ɉ���

���l���g�[�N�ɂāA�����^�����Ƃ̐퓬��̃g�[�N���\�L�Ɠ��e���Ⴄ

�����̑��뎚�̏C��

v 1.01����������������������������������������������������������
���Q�̓X�g�[���[�C�x���g�@�p�}���̈�ՃG���A�Q�ɂ�
�@��΂��T�W�߁A��Ղ̐Δł𒲂ׂ�ۂ�
�@�Δł̒���(��l���`����Ă��镔��)��荶���Œ��ׂ��
�@�m�o�b�Əd�Ȃ��ăC�x���g���i�s���Ȃ��Ȃ�s�

�C�����m�o�b��̔�\���@����у����A�̗����ʒu�𒆉��ɏC��

---
���X�g�[���[���[���ɂȂ��Ă��鎞�ȊO�ŁA
�@�p�}���̑��̏��l�Ɖ�b��A��ʂ��[���ɂȂ�߂�Ȃ��Ȃ�

�C�����e���l�n�m�o�b�Ɖ�b���邱�ƂœV�󂪌��ɖ߂�悤�C��

---
����z�����ɂăT���l�C�����\�����ꂸ�A�G���[���o��s�

---
���ꕔ�{�X�����n���@�|���Ă���z���������Ȃ��s�

�C�����C�x���g�N���A�ŉ���ɏC��
�@�@�@��z����

---
���ߑ��u���B�W���A���C�Y�v������A���j���[��ʂŃG���[��
�\�������s��̏C��

--
v 1.00����������������������������������������������������������

���i��

path: 更新履歴_製品版.txt


code:
imgui.ini
compile_commands.json
.cache/

path: .gitignore


code:
[submodule "subprojects/raylib"]
	path = subprojects/raylib
	url = https://github.com/raysan5/raylib
[submodule "subprojects/nativefiledialog-extended"]
	path = subprojects/nativefiledialog-extended
	url = https://github.com/btzy/nativefiledialog-extended

path: .gitmodules


code:
#include <raylib.h>

#define CAMERA_ZOOM_SPEED 0.05f

// handle zooming and panning with the mouse
void update_camera(Camera2D &camera, Vector2 &prev_mouse_pos);


code:
#ifndef CANVAS_H
#define CANVAS_H

#include "tile.hpp"
#include <raylib.h>
#include <vector>

#define CANVAS_RES_X 32
#define CANVAS_RES_Y 18

typedef Tile *canvas_t[CANVAS_RES_X][CANVAS_RES_Y];

namespace canvas {
void render(canvas_t canvas, Camera2D camera);
// pointer to canvas element at position on the screen,
// used for selecting tiles with the mouse
Tile **tile_from_screen_pos(canvas_t canvas, Camera2D camera,
                            Vector2 screen_pos);
} // namespace canvas

#endif // CANVAS_H


code:
#ifndef EDITOR_H
#define EDITOR_H

#include "canvas.hpp"
#include "tile.hpp"
#include <raylib.h>
#include <string>
#include <vector>

#define SCREEN_WIDTH 1280
#define SCREEN_HEIGHT 720

enum ToolType { PAINT_TOOL, ERASE_TOOL, EYEDROP_TOOL };

struct Editor {
  canvas_t lvl_data;
  std::vector<Tile> tiles;
  Tile *selected_tile;
  Camera2D camera;
  ToolType current_tool;
  std::string save_path;
};

namespace editor {
// sets up some variables and rendering stuff
bool init(Editor &editor);

// event loop
void run(Editor &editor);

void shutdown(Editor &editor);
} // namespace editor

#endif // EDITOR_H


code:
#include "canvas.hpp"
#include "tile.hpp"
#include "utils.hpp"
#include <imgui.h>
#include <iostream>
#include <nfd.h>
#include <string>
#include <vector>

inline void render_menubar(std::vector<Tile> &tiles, canvas_t lvl_data,
                           std::string &save_path) {
  if (ImGui::BeginMainMenuBar()) {
    if (ImGui::BeginMenu("File")) {
      if (ImGui::MenuItem("Save")) {
        if (save_path.empty()) {
          nfdchar_t *out_path;
          nfdresult_t result =
              NFD_SaveDialogN(&out_path, NULL, 0, NULL, "level.lvl");

          if (result == NFD_OKAY) {
            save_path = std::string(out_path);
            NFD_FreePath(out_path);
          } else if (result == NFD_ERROR) {
            printf("Error: %s\n", NFD_GetError());
            return;
          }
        }
        save_level(lvl_data, save_path);
      }

      if (ImGui::MenuItem("Save as")) {
        nfdchar_t *out_path;
        nfdresult_t result =
            NFD_SaveDialogN(&out_path, NULL, 0, NULL, "level.lvl");

        if (result == NFD_OKAY) {
          save_path = std::string(out_path);
          NFD_FreePath(out_path);
        } else if (result == NFD_ERROR) {
          printf("Error: %s\n", NFD_GetError());
          return;
        }
        save_level(lvl_data, save_path);
      }

      if (ImGui::BeginMenu("Open")) {
        if (ImGui::MenuItem("Open level")) {
          nfdchar_t *out_path;
          nfdresult_t result = NFD_OpenDialog(&out_path, NULL, 0, NULL);

          if (result == NFD_OKAY) {
            save_path = std::string(out_path);
            NFD_FreePath(out_path);
          } else if (result == NFD_ERROR) {
            printf("Error: %s\n", NFD_GetError());
            return;
          }
          open_level(lvl_data, tiles, save_path);
        }

        if (ImGui::MenuItem("Open single tile")) {
          nfdchar_t *out_path;
          nfdresult_t result = NFD_OpenDialog(&out_path, NULL, 0, NULL);

          if (result == NFD_OKAY) {
            add_single_tile_to_array(std::string(out_path), tiles);
            NFD_FreePath(out_path);
          } else if (result == NFD_ERROR) {
            printf("Error: %s\n", NFD_GetError());
            return;
          }
        }

        if (ImGui::MenuItem("Open tile directory")) {
          nfdchar_t *out_path;
          nfdresult_t result = NFD_PickFolderN(&out_path, NULL);

          if (result == NFD_OKAY) {
            add_tile_dir_to_array(std::string(out_path), tiles);
            NFD_FreePath(out_path);
          } else if (result == NFD_ERROR) {
            printf("Error: %s\n", NFD_GetError());
            return;
          }
        }

        ImGui::EndMenu();
      }

      ImGui::EndMenu();
    }

    ImGui::EndMainMenuBar();
  }
}


code:
#include "tile.hpp"
#include <imgui.h>
#include <rlgl.h>
#include <vector>

inline void render_tile_selector(std::vector<Tile> &tiles,
                                 Tile *&selected_tile) {
  ImGui::Begin("Tile Selector");

  for (Tile &tile : tiles) {
    ImVec2 cursor_pos = ImGui::GetCursorPos();
    ImGui::Image(&tile.texture.id, ImVec2(50, 50));
    ImGui::SetItemAllowOverlap();
    ImGui::SetCursorPos(cursor_pos);
    bool is_selected =
        (selected_tile != nullptr) ? selected_tile->id == tile.id : false;
    if (ImGui::Selectable(("##" + tile.id).c_str(), is_selected, 0,
                          ImVec2(50, 50))) {
      selected_tile = &tile;
    }

    ImGui::SameLine();
    if (ImGui::GetContentRegionAvail().x < 50)
      ImGui::NewLine();
  }

  ImGui::End();
}


code:
#include <imgui.h>
#include "editor.hpp"

inline void render_toolbar(ToolType &tool) {
  ImGui::Begin("Toolbar");

  if(ImGui::Button("Paint"))
    tool = PAINT_TOOL;

  if(ImGui::Button("Erase"))
    tool = ERASE_TOOL;

  if(ImGui::Button("Eyedrop"))
    tool = EYEDROP_TOOL;

  ImGui::End();
}


code:
#ifndef TILE_H
#define TILE_H

#include <raylib.h>
#include <string>
#include <vector>

struct Tile {
  std::string id;
  Texture2D texture;
};

Tile get_tile_from_path(std::string path);

void add_single_tile_to_array(std::string path, std::vector<Tile> &tile_array);
void add_tile_dir_to_array(std::string path, std::vector<Tile> &tile_array);

#endif // TILE_H


code:
#ifndef UTILS_H
#define UTILS_H

#include "canvas.hpp"
#include <string>

void save_level(canvas_t lvl_data, std::string &save_path);
void open_level(canvas_t lvl_data, std::vector<Tile> &tiles,
                std::string &lvl_path);

#endif // UTILS_H


code:
project('level-editor', 'cpp', default_options : ['cpp_std=c++17'])

cxx = meson.get_compiler('cpp')

cmake = import('cmake')

subdir('src')

inc = include_directories('include')

rlimgui_proj = subproject('rlImGui')
rlimgui_dep = rlimgui_proj.get_variable('rlimgui_dep')

raylib_opts = cmake.subproject_options()
raylib_opts.set_install(false)
raylib_opts.add_cmake_defines({
  'BUILD_EXAMPLES': 'OFF',
  'BUILD_SHARED_LIBS': 'ON'
})
raylib_proj = cmake.subproject('raylib', options: raylib_opts)
raylib_dep = raylib_proj.dependency('raylib')

nfdex = cmake.subproject('nativefiledialog-extended')
nfdex_dep = nfdex.dependency('nfd', method: 'cmake')

deps = [
  rlimgui_dep,
  raylib_dep,
  nfdex_dep,
  cxx.find_library('imgui')
]
if host_machine.system() == 'windows'
  deps += [
    cxx.find_library('winmm'),
  ]
elif host_machine.system() == 'linux'
  deps += [
    cxx.find_library('m'),
    cxx.find_library('dl'),
    dependency('gtk+-3.0'),
  ]
endif

executable('level_editor',
  sources: src,
  dependencies: deps,
  include_directories: inc,
  native: true,
)


code:
#include "camera.hpp"
#include <imgui.h>
#include <raymath.h>
#include <stdio.h>

void update_camera(Camera2D &camera, Vector2 &prev_mouse_pos) {
  // zoom with the mouse wheel(never allow camera zoom to go negative)
  float zoom = ((float)GetMouseWheelMove() * CAMERA_ZOOM_SPEED);
  if (camera.zoom + zoom > 0.0f)
    camera.zoom += zoom;

  // set up mouse drag panning
  Vector2 this_pos = GetMousePosition();
  Vector2 delta = Vector2Subtract(prev_mouse_pos, this_pos);
  prev_mouse_pos = this_pos;

  if (IsMouseButtonDown(
          MOUSE_RIGHT_BUTTON)) { // pan when holding down right click
    camera.target =
        GetScreenToWorld2D(Vector2Add(camera.offset, delta), camera);
  }
}


code:
#include "canvas.hpp"
#include "raylib.h"
#include <algorithm>
#include <imgui.h>

void canvas::render(canvas_t canvas, Camera2D camera) {
  // size to fit on screen
  float size = std::min((float)GetScreenHeight() / CANVAS_RES_Y,
                        (float)GetScreenWidth() / CANVAS_RES_X);
  // draw background
  DrawRectangle(0, 0, size * CANVAS_RES_X, size * CANVAS_RES_Y, RAYWHITE);

  for (size_t i = 0; i < CANVAS_RES_X; i++) {
    for (size_t j = 0; j < CANVAS_RES_Y; j++) {
      // if tile exists
      if (canvas[i][j]) {
        // take the entire tile texture
        Rectangle src = {0.0f, 0.0f, (float)canvas[i][j]->texture.width,
                         (float)canvas[i][j]->texture.height};

        // position on grid
        Rectangle dest = {(float)i * size, (float)j * size, size, size};

        // draw tile
        DrawTexturePro(canvas[i][j]->texture, src, dest, (Vector2){0, 0}, 0.0f,
                       WHITE);
      }

      // draw grid lines
      if (!ImGui::GetIO().WantCaptureMouse) {
        Vector2 mouse_pos = GetScreenToWorld2D(GetMousePosition(), camera);
        if (mouse_pos.x > i * size && mouse_pos.x < i * size + size &&
            mouse_pos.y > j * size && mouse_pos.y < j * size + size)
          DrawRectangleLinesEx(Rectangle{i * size, j * size, size, size}, 3,
                               RED);
      }
    }
  }
}

Tile **canvas::tile_from_screen_pos(canvas_t canvas, Camera2D camera,
                                    Vector2 screen_pos) {
  Vector2 world_pos = GetScreenToWorld2D(screen_pos, camera);
  float tile_size = std::min((float)GetScreenHeight() / CANVAS_RES_Y,
                             (float)GetScreenWidth() / CANVAS_RES_X);

  int x = world_pos.x / tile_size;
  int y = world_pos.y / tile_size;

  return &canvas[x][y];
}


code:
#include "editor.hpp"
#include "camera.hpp"
#include "canvas.hpp"
#include "imgui_windows/menubar.hpp"
#include "imgui_windows/tile_selector.hpp"
#include "imgui_windows/toolbar.hpp"
#include "nfd.hpp"
#include "raylib.h"
#include <imgui.h>
#include <rlImGui.h>
#include <string>

// list of functions to render imgui windows - nice for organization
void render_imgui_windows(std::vector<Tile> &tiles, Tile *&selected_tile,
                          ToolType &tool, canvas_t lvl_data,
                          std::string &save_path) {
  render_tile_selector(tiles, selected_tile);
  render_toolbar(tool);
  render_menubar(tiles, lvl_data, save_path);
  // TODO: moar windows
}

bool editor::init(Editor &editor) {
  // initialize raylib and check for errors
  SetConfigFlags(FLAG_WINDOW_RESIZABLE);
  InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib imgui test");

  if (!IsWindowReady())
    return false;

  // initialize dear imgui
  ImGui::CreateContext();
  SetupRLImGui(true);

  SetTargetFPS(60);

  // Initialize native file dialogs
  if (NFD_Init() == NFD_ERROR)
    return false;

  // initialize some miscellaneous variables
  editor.selected_tile = nullptr;
  for (int i = 0; i < CANVAS_RES_X; i++) {
    for (int j = 0; j < CANVAS_RES_Y; j++) {
      editor.lvl_data[i][j] = nullptr;
    }
  }

  editor.camera.target = {SCREEN_WIDTH / 2.0f, SCREEN_HEIGHT / 2.0f};
  editor.camera.offset = {SCREEN_WIDTH / 2.0f, SCREEN_HEIGHT / 2.0f};
  editor.camera.zoom = 1.0f;
  editor.camera.rotation = 0.0f;

  return true;
}

void editor::run(Editor &editor) {
  Vector2 prev_mouse_pos =
      GetMousePosition(); // save previous mouse position to allow for panning
                          // with the mouse
  while (!WindowShouldClose()) {
    // Handle input only if not interacting with imgui windows
    if (!ImGui::GetIO().WantCaptureMouse) {
      // panning and zooming
      update_camera(editor.camera, prev_mouse_pos);

      // interact with tiles only inside canvas
      if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) {
        Vector2 mouse_pos =
            GetScreenToWorld2D(GetMousePosition(), editor.camera);
        if (mouse_pos.x > 0 && mouse_pos.x < GetScreenWidth() &&
            mouse_pos.y > 0 && mouse_pos.y < GetScreenHeight()) {
          Tile **tile;
          tile = canvas::tile_from_screen_pos(editor.lvl_data, editor.camera,
                                              GetMousePosition());
          if (editor.current_tool == ERASE_TOOL) {
            *tile = nullptr;
          } else if (editor.current_tool == PAINT_TOOL) {
            *tile = editor.selected_tile;
          } else if (editor.current_tool == EYEDROP_TOOL) {
            if (*tile != nullptr)
              editor.selected_tile = *tile;
          }
        }
      }
    }

    // render everything
    BeginDrawing();
    {
      ClearBackground(BLACK);

      BeginMode2D(editor.camera);
      canvas::render(editor.lvl_data, editor.camera);
      EndMode2D();

      BeginRLImGui();
      render_imgui_windows(editor.tiles, editor.selected_tile,
                           editor.current_tool, editor.lvl_data,
                           editor.save_path);
      EndRLImGui();
    }
    EndDrawing();
  }
}

void editor::shutdown(Editor &editor) {
  for (auto &tile : editor.tiles) {
    UnloadTexture(tile.texture);
  }
  ShutdownRLImGui();
  NFD_Quit();
  CloseWindow();
}


code:
#include "editor.hpp"
#include <iostream>
#include <raylib.h>

int main() {
  Editor ed;

  if (!editor::init(ed)) {
    std::cout << "Could not initialize editor!" << std::endl;
    return 1;
  }

  editor::run(ed);

  editor::shutdown(ed);
  return 0;
}


code:
src = files(
  'camera.cpp',
  'main.cpp',
  'editor.cpp',
  'canvas.cpp',
  'tile.cpp',
  'utils.cpp'
)


code:
#include "tile.hpp"
#include <cstring>
#include <filesystem>
#include <iostream>
#include <raylib.h>
#include <string>

Tile get_tile_from_path(std::string path) {
  size_t start = path.find_last_of('/') + 1;
  size_t end = path.find_last_of('.');

  std::string id = path.substr(start, end - start);

  Texture2D tex = LoadTexture(path.c_str());

  Tile t = {id, tex};
  return t;
}

void add_single_tile_to_array(std::string path, std::vector<Tile> &tile_array) {
  const char *ext = GetFileExtension(GetFileName(path.c_str()));
  if (ext != NULL && strcmp(ext, ".png") == 0) {
    Tile tile = get_tile_from_path(path);

    bool should_add = true;
    for (Tile t : tile_array) {
      if (t.id == tile.id)
        should_add = false;
    }

    if (should_add) {
      tile_array.push_back(tile);
    }
  }
}

namespace fs = std::filesystem;

void add_tile_dir_to_array(std::string path, std::vector<Tile> &tile_array) {
  for (auto &e : fs::recursive_directory_iterator(path)) {
    if (e.is_regular_file()) {
      add_single_tile_to_array(e.path().string(), tile_array);
    }
  }
}


code:
#include "utils.hpp"
#include "canvas.hpp"
#include "editor.hpp"
#include "tile.hpp"
#include <fstream>
#include <string.h>
#include <string>
#include <vector>

void save_level(canvas_t lvl_data, std::string &save_path) {
  std::ofstream file;
  file.open(save_path);

  for (int j = 0; j < CANVAS_RES_Y; j++) {
    for (int i = 0; i < CANVAS_RES_X; i++) {
      if (lvl_data[i][j])
        file << lvl_data[i][j]->id;
      if (i < CANVAS_RES_X - 1)
        file << "|";
    }
    if (j < CANVAS_RES_Y - 1)
      file << '\n';
  }

  file.close();
}

void open_level(canvas_t lvl_data, std::vector<Tile> &tiles,
                std::string &lvl_path) {
  std::ifstream file;
  file.open(lvl_path);
  std::string line;
  int n;
  int i = 0;
  while (std::getline(file, line)) {
    const char **split = TextSplit(line.c_str(), '|', &n);
    for (int j = 0; j < n; j++) {
      lvl_data[j][i] = nullptr;
      if (strlen(split[j]) > 0) {
        for (size_t k = 0; k < tiles.size(); k++) {
          if (tiles[k].id == std::string(split[j]))
            lvl_data[j][i] = &tiles[k];
        }
      }
    }
    i++;
  }

  file.close();
}


code:
project('rlImGui', 'cpp')

rlimgui_dep = declare_dependency(
  include_directories: include_directories('.'),
  sources: files('rlImGui.cpp')
)


code:
/**********************************************************************************************
*
*   raylibExtras * Utilities and Shared Components for Raylib
*
*   rlImGui * basic ImGui integration
*
*   LICENSE: ZLIB
*
*   Copyright (c) 2020 Jeffery Myers
*
*   Permission is hereby granted, free of charge, to any person obtaining a copy
*   of this software and associated documentation files (the "Software"), to deal
*   in the Software without restriction, including without limitation the rights
*   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
*   copies of the Software, and to permit persons to whom the Software is
*   furnished to do so, subject to the following conditions:
*
*   The above copyright notice and this permission notice shall be included in all
*   copies or substantial portions of the Software.
*
*   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
*   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
*   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
*   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
*   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
*   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*   SOFTWARE.
*
**********************************************************************************************/
#include "rlImGui.h"

#include "imgui.h"
#include "raylib.h"
#include "rlgl.h"

#include <math.h>
#include <vector>
#include <map>

static std::vector<Texture> LoadedTextures;
static Texture2D FontTexture;

static ImGuiMouseCursor CurrentMouseCursor = ImGuiMouseCursor_COUNT;
static std::map<ImGuiMouseCursor, MouseCursor> MouseCursorMap;

static const char* rlImGuiGetClipText(void*)
{
    return GetClipboardText();
}

static void rlImGuiSetClipText(void*, const char* text)
{
    SetClipboardText(text);
}

static void rlImGuiNewFrame()
{
    ImGuiIO& io = ImGui::GetIO();

    io.DisplaySize.x = float(GetScreenWidth());
    io.DisplaySize.y = float(GetScreenHeight());

    io.DeltaTime = GetFrameTime();

    io.KeyCtrl = IsKeyDown(KEY_RIGHT_CONTROL) || IsKeyDown(KEY_LEFT_CONTROL);
    io.KeyShift = IsKeyDown(KEY_RIGHT_SHIFT) || IsKeyDown(KEY_LEFT_SHIFT);
    io.KeyAlt = IsKeyDown(KEY_RIGHT_ALT) || IsKeyDown(KEY_LEFT_ALT);
    io.KeySuper = IsKeyDown(KEY_RIGHT_SUPER) || IsKeyDown(KEY_LEFT_SUPER);

    if (io.WantSetMousePos)
    {
        SetMousePosition((int)io.MousePos.x, (int)io.MousePos.y);
    }
    else
    {
        io.MousePos.x = (float)GetMouseX();
        io.MousePos.y = (float)GetMouseY();
    }

    io.MouseDown[0] = IsMouseButtonDown(MOUSE_LEFT_BUTTON);
    io.MouseDown[1] = IsMouseButtonDown(MOUSE_RIGHT_BUTTON);
    io.MouseDown[2] = IsMouseButtonDown(MOUSE_MIDDLE_BUTTON);

    if (GetMouseWheelMove() > 0)
        io.MouseWheel += 1;
    else if (GetMouseWheelMove() < 0)
        io.MouseWheel -= 1;

    if ((io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) == 0)
    {
        ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor();
        if (imgui_cursor != CurrentMouseCursor || io.MouseDrawCursor)
        {
            CurrentMouseCursor = imgui_cursor;
            if (io.MouseDrawCursor || imgui_cursor == ImGuiMouseCursor_None)
            {
                HideCursor();
            }
            else
            {
                ShowCursor();

                if (!(io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange))
                {
                    auto itr = MouseCursorMap.find(imgui_cursor);
                    if (itr == MouseCursorMap.end())
                        SetMouseCursor(MOUSE_CURSOR_DEFAULT);
                    else
                        SetMouseCursor(itr->second);
                }
            }
        }
    }
}

#define FOR_ALL_KEYS(X) \
    do { \
    X(KEY_APOSTROPHE); \
    X(KEY_COMMA); \
    X(KEY_MINUS); \
    X(KEY_PERIOD); \
    X(KEY_SLASH); \
    X(KEY_ZERO); \
    X(KEY_ONE); \
    X(KEY_TWO); \
    X(KEY_THREE); \
    X(KEY_FOUR); \
    X(KEY_FIVE); \
    X(KEY_SIX); \
    X(KEY_SEVEN); \
    X(KEY_EIGHT); \
    X(KEY_NINE); \
    X(KEY_SEMICOLON); \
    X(KEY_EQUAL); \
    X(KEY_A); \
    X(KEY_B); \
    X(KEY_C); \
    X(KEY_D); \
    X(KEY_E); \
    X(KEY_F); \
    X(KEY_G); \
    X(KEY_H); \
    X(KEY_I); \
    X(KEY_J); \
    X(KEY_K); \
    X(KEY_L); \
    X(KEY_M); \
    X(KEY_N); \
    X(KEY_O); \
    X(KEY_P); \
    X(KEY_Q); \
    X(KEY_R); \
    X(KEY_S); \
    X(KEY_T); \
    X(KEY_U); \
    X(KEY_V); \
    X(KEY_W); \
    X(KEY_X); \
    X(KEY_Y); \
    X(KEY_Z); \
    X(KEY_SPACE); \
    X(KEY_ESCAPE); \
    X(KEY_ENTER); \
    X(KEY_TAB); \
    X(KEY_BACKSPACE); \
    X(KEY_INSERT); \
    X(KEY_DELETE); \
    X(KEY_RIGHT); \
    X(KEY_LEFT); \
    X(KEY_DOWN); \
    X(KEY_UP); \
    X(KEY_PAGE_UP); \
    X(KEY_PAGE_DOWN); \
    X(KEY_HOME); \
    X(KEY_END); \
    X(KEY_CAPS_LOCK); \
    X(KEY_SCROLL_LOCK); \
    X(KEY_NUM_LOCK); \
    X(KEY_PRINT_SCREEN); \
    X(KEY_PAUSE); \
    X(KEY_F1); \
    X(KEY_F2); \
    X(KEY_F3); \
    X(KEY_F4); \
    X(KEY_F5); \
    X(KEY_F6); \
    X(KEY_F7); \
    X(KEY_F8); \
    X(KEY_F9); \
    X(KEY_F10); \
    X(KEY_F11); \
    X(KEY_F12); \
    X(KEY_LEFT_SHIFT); \
    X(KEY_LEFT_CONTROL); \
    X(KEY_LEFT_ALT); \
    X(KEY_LEFT_SUPER); \
    X(KEY_RIGHT_SHIFT); \
    X(KEY_RIGHT_CONTROL); \
    X(KEY_RIGHT_ALT); \
    X(KEY_RIGHT_SUPER); \
    X(KEY_KB_MENU); \
    X(KEY_LEFT_BRACKET); \
    X(KEY_BACKSLASH); \
    X(KEY_RIGHT_BRACKET); \
    X(KEY_GRAVE); \
    X(KEY_KP_0); \
    X(KEY_KP_1); \
    X(KEY_KP_2); \
    X(KEY_KP_3); \
    X(KEY_KP_4); \
    X(KEY_KP_5); \
    X(KEY_KP_6); \
    X(KEY_KP_7); \
    X(KEY_KP_8); \
    X(KEY_KP_9); \
    X(KEY_KP_DECIMAL); \
    X(KEY_KP_DIVIDE); \
    X(KEY_KP_MULTIPLY); \
    X(KEY_KP_SUBTRACT); \
    X(KEY_KP_ADD); \
    X(KEY_KP_ENTER); \
    X(KEY_KP_EQUAL); \
    } while(0)

#define SET_KEY_DOWN(KEY) io.KeysDown[KEY] = IsKeyDown(KEY)

static void rlImGuiEvents()
{
    ImGuiIO& io = ImGui::GetIO();
    FOR_ALL_KEYS(SET_KEY_DOWN);

    unsigned int pressed = GetCharPressed();
    if (pressed != 0)
        io.AddInputCharacter(pressed);
}

static void rlImGuiTriangleVert(ImDrawVert& idx_vert)
{
    Color* c;
    c = (Color*)&idx_vert.col;
    rlColor4ub(c->r, c->g, c->b, c->a);
    rlTexCoord2f(idx_vert.uv.x, idx_vert.uv.y);
    rlVertex2f(idx_vert.pos.x, idx_vert.pos.y);
}

static void rlImGuiRenderTriangles(unsigned int count, int indexStart, const ImVector<ImDrawIdx>& indexBuffer, const ImVector<ImDrawVert>& vertBuffer, void* texturePtr)
{
    Texture* texture = (Texture*)texturePtr;

    unsigned int textureId = (texture == nullptr) ? 0 : texture->id;

    rlBegin(RL_TRIANGLES);
    rlSetTexture(textureId);

    for (unsigned int i = 0; i <= (count - 3); i += 3)
    {
        if(rlCheckRenderBatchLimit(3))
        {
            rlBegin(RL_TRIANGLES);
            rlSetTexture(textureId);
        }

        ImDrawIdx indexA = indexBuffer[indexStart + i];
        ImDrawIdx indexB = indexBuffer[indexStart + i + 1];
        ImDrawIdx indexC = indexBuffer[indexStart + i + 2];

        ImDrawVert vertexA = vertBuffer[indexA];
        ImDrawVert vertexB = vertBuffer[indexB];
        ImDrawVert vertexC = vertBuffer[indexC];

        rlImGuiTriangleVert(vertexA);
        rlImGuiTriangleVert(vertexB);
        rlImGuiTriangleVert(vertexC);
    }
    rlEnd();
}

static void EnableScissor(float x, float y, float width, float height)
{
    rlEnableScissorTest();
    rlScissor((int)x, GetScreenHeight() - (int)(y + height), (int)width, (int)height);
}

static void rlRenderData(ImDrawData* data)
{
    rlDrawRenderBatchActive();
    rlDisableBackfaceCulling();

    for (int l = 0; l < data->CmdListsCount; ++l)
    {
        int idxOffset = 0;

        const ImDrawList* commandList = data->CmdLists[l];

        for (const auto& cmd : commandList->CmdBuffer)
        {
            EnableScissor(cmd.ClipRect.x - data->DisplayPos.x, cmd.ClipRect.y - data->DisplayPos.y, cmd.ClipRect.z - (cmd.ClipRect.x - data->DisplayPos.x), cmd.ClipRect.w - (cmd.ClipRect.y - data->DisplayPos.y));
            if (cmd.UserCallback != nullptr)
            {
                cmd.UserCallback(commandList, &cmd);
                idxOffset += cmd.ElemCount;
                continue;
            }

            rlImGuiRenderTriangles(cmd.ElemCount, idxOffset, commandList->IdxBuffer, commandList->VtxBuffer, cmd.TextureId);
            idxOffset += cmd.ElemCount;

            rlDrawRenderBatchActive();
        }
    }

    rlSetTexture(0);
    rlDisableScissorTest();
    rlEnableBackfaceCulling();
}

void SetupMouseCursors()
{
    MouseCursorMap.clear();
    MouseCursorMap[ImGuiMouseCursor_Arrow] = MOUSE_CURSOR_ARROW;
    MouseCursorMap[ImGuiMouseCursor_TextInput] = MOUSE_CURSOR_IBEAM;
    MouseCursorMap[ImGuiMouseCursor_Hand] = MOUSE_CURSOR_POINTING_HAND;
    MouseCursorMap[ImGuiMouseCursor_ResizeAll] = MOUSE_CURSOR_RESIZE_ALL;
    MouseCursorMap[ImGuiMouseCursor_ResizeEW] = MOUSE_CURSOR_RESIZE_EW;
    MouseCursorMap[ImGuiMouseCursor_ResizeNESW] = MOUSE_CURSOR_RESIZE_NESW;
    MouseCursorMap[ImGuiMouseCursor_ResizeNS] = MOUSE_CURSOR_RESIZE_NS;
    MouseCursorMap[ImGuiMouseCursor_ResizeNWSE] = MOUSE_CURSOR_RESIZE_NWSE;
    MouseCursorMap[ImGuiMouseCursor_NotAllowed] = MOUSE_CURSOR_NOT_ALLOWED;
}

void InitRLGLImGui()
{
    ImGui::CreateContext(nullptr);
}

void FinishRLGLImguSetup()
{
    SetupMouseCursors();

    ImGuiIO& io = ImGui::GetIO();
    io.BackendPlatformName = "imgui_impl_raylib";

    io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;

    io.KeyMap[ImGuiKey_Tab] = KEY_TAB;
    io.KeyMap[ImGuiKey_LeftArrow] = KEY_LEFT;
    io.KeyMap[ImGuiKey_RightArrow] = KEY_RIGHT;
    io.KeyMap[ImGuiKey_UpArrow] = KEY_UP;
    io.KeyMap[ImGuiKey_DownArrow] = KEY_DOWN;
    io.KeyMap[ImGuiKey_PageUp] = KEY_PAGE_DOWN;
    io.KeyMap[ImGuiKey_PageDown] = KEY_PAGE_UP;
    io.KeyMap[ImGuiKey_Home] = KEY_HOME;
    io.KeyMap[ImGuiKey_End] = KEY_END;
    io.KeyMap[ImGuiKey_Insert] = KEY_INSERT;
    io.KeyMap[ImGuiKey_Delete] = KEY_DELETE;
    io.KeyMap[ImGuiKey_Backspace] = KEY_BACKSPACE;
    io.KeyMap[ImGuiKey_Space] = KEY_SPACE;
    io.KeyMap[ImGuiKey_Enter] = KEY_ENTER;
    io.KeyMap[ImGuiKey_Escape] = KEY_ESCAPE;
    io.KeyMap[ImGuiKey_KeyPadEnter] = KEY_KP_ENTER;
    io.KeyMap[ImGuiKey_A] = KEY_A;
    io.KeyMap[ImGuiKey_C] = KEY_C;
    io.KeyMap[ImGuiKey_V] = KEY_V;
    io.KeyMap[ImGuiKey_X] = KEY_X;
    io.KeyMap[ImGuiKey_Y] = KEY_Y;
    io.KeyMap[ImGuiKey_Z] = KEY_Z;

    io.MousePos = ImVec2(0, 0);

    io.SetClipboardTextFn = rlImGuiSetClipText;
    io.GetClipboardTextFn = rlImGuiGetClipText;

    io.ClipboardUserData = nullptr;

    ReloadImGuiFonts();
}

void SetupRLImGui(bool dark)
{
    InitRLGLImGui();

    if (dark)
        ImGui::StyleColorsDark();
    else
        ImGui::StyleColorsLight();

    FinishRLGLImguSetup();
}

void ReloadImGuiFonts()
{
    ImGuiIO& io = ImGui::GetIO();
    unsigned char* pixels = nullptr;

    int width;
    int height;
    io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height, nullptr);
    Image image = GenImageColor(width, height, BLANK);
    memcpy(image.data, pixels, width * height * 4);

    if (FontTexture.id != 0)
        UnloadTexture(FontTexture);

    FontTexture = LoadTextureFromImage(image);
    UnloadImage(image);
    io.Fonts->TexID = &FontTexture;
}

void BeginRLImGui()
{
    rlImGuiNewFrame();
    rlImGuiEvents();
    ImGui::NewFrame();
}

void EndRLImGui()
{
    ImGui::Render();
    rlRenderData(ImGui::GetDrawData());
}

void ShutdownRLImGui()
{
    for (const auto& tx : LoadedTextures)
        UnloadTexture(tx);

    UnloadTexture(FontTexture);
    LoadedTextures.clear();
}

void RLImGuiImage(const Texture *image)
{
    ImGui::Image((ImTextureID)image, ImVec2(float(image->width), float(image->height)));
}

void RLImGuiImageSize(const Texture *image, int width, int height)
{
    ImGui::Image((ImTextureID)image, ImVec2(float(width), float(height)));
}

void RLImGuiImageRect(const Texture* image, int destWidth, int destHeight, Rectangle sourceRect)
{
    ImVec2 uv0;
    ImVec2 uv1;

    if (sourceRect.width < 0)
    {
        uv0.x = -((float)sourceRect.x / image->width);
        uv1.x = (uv0.x - (float)(fabs(sourceRect.width) / image->width));
    }
    else
    {
        uv0.x = (float)sourceRect.x / image->width;
        uv1.x = uv0.x + (float)(sourceRect.width / image->width);
    }

    if (sourceRect.height < 0)
    {
        uv0.y = -((float)sourceRect.y / image->height);
        uv1.y = (uv0.y - (float)(fabs(sourceRect.height) / image->height));
    }
    else
    {
        uv0.y = (float)sourceRect.y / image->height;
        uv1.y = uv0.y + (float)(sourceRect.height / image->height);
    }

    ImGui::Image((ImTextureID)image, ImVec2(float(destWidth), float(destHeight)),uv0,uv1);
}


code:
/**********************************************************************************************
*
*   raylibExtras * Utilities and Shared Components for Raylib
*
*   rlImGui * basic ImGui integration
*
*   LICENSE: ZLIB
*
*   Copyright (c) 2020 Jeffery Myers
*
*   Permission is hereby granted, free of charge, to any person obtaining a copy
*   of this software and associated documentation files (the "Software"), to deal
*   in the Software without restriction, including without limitation the rights
*   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
*   copies of the Software, and to permit persons to whom the Software is
*   furnished to do so, subject to the following conditions:
*
*   The above copyright notice and this permission notice shall be included in all
*   copies or substantial portions of the Software.
*
*   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
*   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
*   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
*   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
*   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
*   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*   SOFTWARE.
*
**********************************************************************************************/

#pragma once

#include "raylib.h"
#include "imgui.h"

namespace ImGuiColors
{
    inline ImVec4 Convert(::Color color)
    {
        return ImVec4(color.r / 255.0f, color.g / 255.0f, color.b / 255.0f, color.a / 255.0f);
    }
}

// basic API
void SetupRLImGui(bool dark);
void BeginRLImGui();
void EndRLImGui();
void ShutdownRLImGui();

// Advanced StartupAPI
void InitRLGLImGui();
void FinishRLGLImguSetup();
void ReloadImGuiFonts();

// image API
void RLImGuiImage(const Texture *image);
void RLImGuiImageSize(const Texture *image, int width, int height);
void RLImGuiImageRect(const Texture* image, int destWidth, int destHeight, Rectangle sourceRect);


code:
*.sav
*.log
sound/
dat/
sav/
debug/
emuera.config

*.DS_Store
.vs/
.vscode/*
*.code-workspace
!default.code-workspace
*.lnk
profile
.cursorrules

repo_name: pervysquirrelz/erafl

license: unknown


code:
;快感系は0～9に固定
0,Ｃ感
1,Ｖ感
2,Ａ感
3,Ｂ感
4,Ｍ感
5,Ｕ感

12,欲望
13,性技
14,性知識
;15,衣装嗜好

20,奉仕
21,性交
22,レズ
23,ＢＬ
24,露出
25,自慰
26,精愛
27,射精
28,噴乳
29,排泄
30,触手
31,出産
32,肝臓
33,マゾ
34,サド
35,催眠

50,身体
51,器用
52,知識
53,社交
54,魔術
55,観察

60,歌唱
61,料理
62,話術
63,戦闘

;武器用ステータス
71,攻撃力,
72,防御力
73,軽減値,
74,行動力,
75,敵視,
76,隠蔽性,
77,脅威選定,

;ライブ活動関連ステータス
81,演技力ＣＯ, ;COOL
82,演技力ＣＵ, ;CUTE
83,演技力ＰＡ, ;PASSION
84,演技力ＬＥ, ;LEWD

90,主導度Ｎ,;SM傾向を表す(-1000～1000) 日常
91,主導度Ｕ,;SM傾向を表す(-1000～1000) ウフフ
92,倒錯度,;ハードなプレイを好むかどうかを表す(0～1000)
99,野心


code:
1,所属
2,好感度
3,依存度
4,従属度
5,支配度

6,調教参加フラグ, 	;キャラがその調教（会いに行くなどの和姦も含む）に参加する場合、事前に立てておく

7,閨に呼ぶで選択中, ;拠点フェイズメニュー「閨に呼ぶ」で選択していることを示す。

9,捕虜先

11,捕虜の扱い,		;捕虜の扱いでどれを選択したかが入る
12,特殊状態,	;0通常 1放浪 2脂肪 NPCが通常のまま無所属になると出てこられないので気をつけられたし
13,労働内容,        ;どの労働をやっているか 0ならナシ
14,以前の君主,		;前にいた勢力の君主のID

16,行動不能状態,	;0=通常  1=臨月  2=育児中  3=怪我（使ってない）  4=育児中の子供
17,面識,			;MASTERと会ったことがあるか。
18,妊娠期間,		;妊娠してからの経過ターン数
;19,子の遺伝上の父親,;腹の中にいる子の、遺伝上の父親のID
;20,遺伝上の父親,	;そのキャラの、遺伝上の父親のID
21,母親,			;そのキャラの母親のID
22,育児対象,		;そのキャラが育児している子供のID
23,子の父親,		;腹の中にいる子の、中出し履歴から推定された父親
24,父親,			;そのキャラの、中出し履歴から推定された父親のID
25,育児期間,		;出産して育児に入ってからのターン数
26,妊娠時バストサイズ増加,	;妊娠した際にバストサイズが増加したか？
28,子の成長度,		;子の成長具合
29,軟禁中,		;捕虜の軟禁中
30,捕虜怒,			;捕虜の扱いに応じて与える怒
31,捕虜哀,			;捕虜の扱いに応じて与える哀
32,捕虜怖,			;捕虜の扱いに応じて与える怖
33,一時的母乳体質,		;妊娠によって一時的に母乳体質になっているフラグ。永続させる場合は0。
34,最強編成除外フラグ,	;最強編成選出において、そのキャラを選出させないフラグ（MASTERと同勢力所属時のみ有効）
35,避妊薬残ターン,		;アイテム「避妊薬」の残りターン数
36,排卵誘発剤,          ;アイテム「排卵誘発剤」の残りターン数（基本1とする）
37,精神力回復量補正,;拷問などによる、ターンエンド時の精神力回復量への補正
38,一時的ふたなり
39,性偏差,;徐々に性転換するイベント用。性転換進行度。　0=未設定あるいは性偏差変動経験無し　40=男の娘の初期値　1=男性と女性の初期値　100=通常の最大値　120=ふたなり時の最大値

42,外交要求成功フラグ,	;1=武力で脅す 2=快楽で籠絡  3==薬物で籠絡　よりおおきいほうが優先
43,解放カウンタ,	;捕虜として捕えられているターン数のカウンタ これがある程度大きくなると確率で解放　ただし特殊勢力の捕虜の場合動かない
44,振られた回数,	;主人公に告白して振られた回数
45,引き継ぎキャラ,	;引き継いだキャラ
48,自国勧誘成功フラグ, 	;コマンド「自国に誘う」成功時の移動フラグ
49,陥落するな,;親友以外の陥落素質の取得禁止
50,汎用口上パターン
41,口上カラーコード

;使っているが、配列的に利用しているため定数割り当ては用意していない
;51～54:口上関係予備
;※50～54はキャラ初期化時に変数を退避

55,触手産卵実行者,	;そのキャラに触手産卵を実行したキャラのID
56,触手Ａ産卵実行者,	;そのキャラに触手Ａ産卵を実行したキャラのID
57,捕虜調教の助手, 	;そのキャラを捕虜調教の助手として選択しているフラグ
58,外交選択フラグ,	;外交でキャラを選択する必要がある際に、それを保存するために使う　レガシーなので置き換え検討
59,外交調教カウンタ,	;外交からの調教させろに成功してからの経過ターン
60,調教中帰らない,	;調教中にキレたり悲しんだりして帰らない
61,触手Ｕ産卵実行者,	;そのキャラに触手Ｕ産卵を実行したキャラのID
62,陥落済み,		;陥落素質を取得したことがある
64,TEXT_LAST非表示,	;TEXT_LASTを表示しないフラグ
65,能力固定フラグ,	;調教中に能力を変動させない
66,元男の娘フラグ,	;性転換薬を使った時の挙動に関わる
67,酔い累積値,		;[酒豪]取得の条件判定用
68,薬物依存,		;麻薬などを使用して増える
69,強制友好化,		;調教中、マイナス感情を抑えプラス感情に補正する
70,夜這いの助手,
72,教育方針,		;子供に対し設定した教育方針
73,調教中BASE減らない,;調教中体力気力が減らない
74,外交調教中, ;外交調教中である
78,慰安参加者,	;慰安、あてがうなどでヤる側のキャラ
79,慰安モブ,
80,ゲストモブ,
81,キャラＩＤ
82,主導除外,        ;おまかせ、なすがまま時に常にターゲットに回る
83,凌辱被害者フラグ,        ;苛烈な陵辱などで怒、哀、怖の補正を引き上げる
84,慰安参加者非対象化, ;CFLAG:慰安参加者が立ってるキャラをおまかせコマンドの対象外に
85,イベントポーン, ;クエスト用のイベントポーン
86,設備モブ, ;設備限定でゲスト参加するモブ(触手など)
87,クローン元キャラＩＤ, ;このキャラが別のキャラのクローンである場合、クローン元キャラのキャラＩＤが入る

90,交流除外, ;領内活動に参加させないフラグ
91,行動済み
94,崩壊
95,投獄実行者,	;戦争捕虜としてでなく、ショップメニューなどから投獄したキャラのID
;96,里子フラグ,	;生まれた子供を里子に出すフラグ

100,浮気回数
101,陥落イベントクールタイム
102,関係性デイリー実施済, ;関係性デイリーイベントの実行、対象になった場合に立てるフラグ

;100～104:ウフフコマンドの知識(主導実行に必要)
;110:身体育成コマンド選択回数(ベース)
;111:知識育成コマンド選択回数(ベース)
;112:社交育成コマンド選択回数(ベース)
;113:歌唱育成コマンド選択回数(ベース)
;114:料理育成コマンド選択回数(ベース)
;120:身体育成コマンド選択回数(訓練)
;121:知識育成コマンド選択回数(訓練)
;122:社交育成コマンド選択回数(訓練)
;123:歌唱育成コマンド選択回数(訓練)
;124:料理育成コマンド選択回数(訓練)
;130:子供の武術成長度(ベース)
;131:子供の知識成長度(ベース)
;132:子供の政治成長度(ベース)
;133:子供の歌唱成長度(ベース)
;134:子供の料理成長度(ベース)
;140:子供の武術成長度(訓練)
;141:子供の知識成長度(訓練)
;142:子供の政治成長度(訓練)
;143:子供の歌唱成長度(訓練)
;144:子供の料理成長度(訓練)
;150～169:中出し履歴(妊娠時に種親となりうるキャラのID
;170～189:中出し履歴の記録から経過した時間(1期ごとに+1、5期で削除)
;190～199:機嫌に関するPALAM(10～19)を保存する変数 ※BEGIN TRAINによる初期化対策
;
;2000～2999:口上で自由に使用可能
;
200,Ａ妊娠期間
201,Ｕ妊娠期間
250,初めてキスをしたフラグ,;1:経験済み
400,口上非表示,;0:表示, 1:非表示
500,キャラ消費金額,  ;ゲストモブの買い物上限額
501,キャラ滞在時間, ;ゲストモブがマップにとどまる時間
502,キャラ購買意欲, ;ゲストモブがアイテムの購入を試みる確率
503,スケベモブ, ;ゲストのうち性的な行為に抵抗がないモブ
504,カップル相手キャラID, ;カップルのゲストモブの相手キャラID
600,交流参加
700,生活スキル拡張上限
701,冒険スキル拡張上限
702,性技スキル拡張上限

800,QST好感度ボーナス, ;クエスト中の好感度上昇値
801,QST食事,

1000,奴隷調教の方針,;・ルート 0:恋慕, 1:淫乱, 2:隷属
1001,初期キャラ,
1005,口上,;
1006,地の文と併用するか,; 0, 地の文だけ, 1, 口上だけ 2, 地の文と口上併用
1009,髪の色,;
1010,身長,;

1050,衣装プリセット,;適用する衣装プリセットを指定
1051,衣装プリセット変更予約,;適用する衣装プリセットを指定。次回の@HO_REDRESS 実行時に適用
1052,衣装ドロア初期登録済み,;初回の衣装ドロア登録処理時に真に

1100,ポートレイト画像タイプ, ;0:パーツ 1:差分形式, 2:差分なし固定
1101,ポートレイト情報初回読込, ;CSVからポートレイトのパーツ情報初回読み出し時のフラグ


code:
番号,0
名前,あなた
呼び名,あなた
CSTR,99,あなた

CSTR,1,あなた
CSTR,3,アナタ
CSTR,4,アナタ
CSTR,6,アナタ

基礎,体力,2000
基礎,気力,1500
基礎,精神力,2500

素質,性別,0
素質,成長型,0

素質,処女,
素質,アナル処女,
素質,童貞,
素質,キス未経験,

能力,性知識,5
能力,性技,2
能力,身体,30
能力,器用,30
能力,知識,30
能力,観察,20
能力,社交,30
能力,歌唱,20
能力,料理,20
能力,話術,30
能力,戦闘,30

素質,Ｖ締まり,500
素質,Ａ締まり,500
素質,陰毛現在値,5
素質,陰毛目標値,5
素質,髪色,0x000000
素質,髪の長さ,200

path: CSV/Chara/Chara0 あなた.csv


code:
番号,13,
名前,アレクシア,
呼び名,アレクシア,
CSTR,0,グランベル
CSTR,1,アレクシア
CSTR,3,アレクシア
CSTR,4,アレクシア
CSTR,5,グランベル
CSTR,6,アレクシア
CSTR,7,アレクシア
CSTR,8,人間
CSTR,99,アレクシア

基礎,体力,2500
基礎,気力,2000
基礎,精神力,2000

能力,身体,65
能力,器用,40
能力,知識,30
能力,観察,30
能力,社交,40
能力,歌唱,20
能力,料理,20
能力,話術,30
能力,戦闘,65

能力,主導度Ｎ,-200
能力,主導度Ｕ,-500
能力,倒錯度,300
能力,野心,30
能力,Ｃ感,2
能力,Ｖ感,5
能力,Ａ感,4
能力,Ｂ感,2
能力,Ｍ感,1
能力,欲望,4
能力,性技,4
能力,性知識,4
能力,奉仕,4
能力,性交,3
能力,精愛,2
能力,マゾ,4
能力,肝臓,0

素質,性別,1
素質,処女,0
素質,キス未経験,0
素質,アナル処女,0

素質,気丈,1
素質,プライド高い,1
素質,自制心,1
素質,悲観的,1
素質,痛みに強い,1
素質,快感の否定,1
素質,Ｍ気質,1
素質,Ｖ敏感,1
素質,Ａ敏感,1

素質,成長型,4
素質,性格,2
素質,髪色,0xFFEA91
素質,髪の長さ,5
素質,姓名逆転,1
CFLAG,口上カラーコード,0xFFEA91

CFLAG,好感度,500
CFLAG,依存度,200
CFLAG,従属度,500

素質,Ｖ締まり,500
素質,Ａ締まり,500
素質,陰毛現在値,0
素質,陰毛目標値,0
素質,腋毛現在値,0
素質,腋毛目標値,0
素質,バストサイズ,1
素質,ヒップサイズ,0
素質,体型,0
素質,体格,1

素質,職業,13

経験,絶頂経験,38
経験,苦痛快楽経験,52
経験,膣内射精経験,25
経験,腸内射精経験,22
経験,口内射精経験,18
経験,キス経験,8
経験,口淫経験,24
経験,Ｖ性交経験,68
経験,Ａ性交経験,40
経験,輪姦経験,36

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリ　と対応
CSTR,100,兜,;頭
CSTR,101,なし,;首
CSTR,102,なし,;上服
CSTR,103,なし,;下服
CSTR,104,なし,;上着
CSTR,105,プレートメイル,;上下服
CSTR,106,スポーツブラ,;下着上
CSTR,107,スパッツ,;下着下
CSTR,108,なし;上下下着
CSTR,109,ガントレット,;腕
CSTR,110,ニーソックス,;靴下
CSTR,111,グリーブ,;靴
CSTR,112,ナイフ,;アクセサリ

;[ポートレイトパーツ情報]CharaN_キャラ名.csvに貼り付けて使用
CSTR,120,CC1_後髪_1
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_1
CSTR,123,CC1_瞳_1
CSTR,124,CC1_目_1
CSTR,128,CC1_服_鎧_0
CSTR,129,CC1_前髪_3
CSTR,150,橙
CSTR,151,
CSTR,152,
CSTR,153,黄
CSTR,154,
CSTR,158,
CSTR,159,橙


code:
番号,14,
名前,ススキ,
呼び名,ススキ,
CSTR,0,柘植
CSTR,1,芒
CSTR,3,ススキ
CSTR,4,ススキ
CSTR,5,ツゲ
CSTR,6,ススキ
CSTR,7,ススキ
CSTR,8,人間
CSTR,99,UC_ススキ

基礎,体力,2400
基礎,気力,2000
基礎,精神力,2100

;eraは小数を読み込めないためいずれも一の位を小数第一位として扱う
;174.5cmは1745、54.2kgは542とする
基礎,身長,1705;cm
基礎,体重,585;kg
基礎,バスト,835;cm
基礎,ウェスト,584;cm
基礎,ヒップ,850;cm

能力,身体,61
能力,器用,68
能力,知識,43
能力,観察,59
能力,社交,46
能力,歌唱,10
能力,料理,15
能力,話術,45
能力,戦闘,59
能力,魔術,0

能力,主導度Ｎ,0
能力,主導度Ｕ,100
能力,倒錯度,0
能力,野心,15
能力,Ｃ感,2
能力,Ｖ感,2
能力,Ｂ感,2
能力,欲望,2
能力,性技,3
能力,性知識,4
能力,奉仕,2
能力,性交,2
能力,肝臓,3

素質,性別,1
素質,処女,0
素質,キス未経験,0
素質,アナル処女,1

素質,プライド高い,1
素質,自制心,1
素質,恥薄い,1
素質,痛みに強い,1
素質,献身的,1

素質,Ｖ鈍感,1
素質,Ａ敏感,1
素質,回復早い,1
素質,美脚,1

素質,成長型,0
素質,性格,3
素質,髪色,0x636AA5
素質,髪の長さ,3
素質,姓名逆転,0
CFLAG,口上カラーコード,0x8C95EE

素質,Ｖ締まり,650
素質,Ａ締まり,900
素質,陰毛現在値,0
素質,陰毛目標値,0
素質,腋毛現在値,0
素質,腋毛目標値,0
素質,バストサイズ,0
素質,ヒップサイズ,0
素質,体型,0
素質,体格,0

素質,職業,5,; 変数JOB_NAME 参照　傭兵　という在り方が一番しっくりくるか

経験,絶頂経験,18
経験,苦痛快楽経験,21
経験,膣内射精経験,12
経験,腸内射精経験,0
経験,口内射精経験,16
経験,キス経験,11
経験,口淫経験,32
経験,Ｖ性交経験,20
経験,Ａ性交経験,0
経験,輪姦経験,11

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリ　と対応
CSTR,100,頭巾,;頭
CSTR,101,マフラー,;首
CSTR,102,なし,;上服
CSTR,103,なし,;下服
CSTR,104,胸当,;上着
CSTR,105,忍装束,;上下服
CSTR,106,さらし,;下着上
CSTR,107,ふんどし,;下着下
CSTR,108,なし;上下下着
CSTR,109,手甲,;腕
CSTR,110,足袋,;靴下
CSTR,111,草履,;靴
CSTR,112,なし,;アクセサリ

;[ポートレイトパーツ情報]キャラ情報の[ポートレイト・口上編集]から出力可能
CSTR,120,CC1_後髪_6
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_0
CSTR,123,CC1_瞳_2
CSTR,124,CC1_目_2
CSTR,128,CC1_服_特殊_3
CSTR,129,CC1_前髪_13
CSTR,150,104:108:144
CSTR,151,256:244:228
CSTR,152,256:244:228
CSTR,153,240:92:72
CSTR,154,
CSTR,158,164:192:224
CSTR,159,104:108:144


code:
番号,15,,
名前,ミニョネット,,
呼び名,ミニョネット,,
CSTR,0,ド・ラ・フォンテヌ,
CSTR,1,マルグリット・エレーヌ,
CSTR,2,ミニョネット,
CSTR,3,ミニョネット,
CSTR,4,ミニョネット,
CSTR,5,ド・ラ・フォンテヌ,
CSTR,6,マルグリット・エレーヌ,
CSTR,7,ミニョネット,
CSTR,8,人間,
CSTR,99,ミニョネット,

CFLAG,支配度,300,

基礎,体力,1800,
基礎,気力,1500,
基礎,精神力,2000,

;eraは小数を読み込めないためいずれも一の位を小数第一位として扱う
;174.5cmは1745、54.2kgは542とする
基礎,身長,1613;cm,
基礎,体重,493;kg,
基礎,バスト,797;cm,
基礎,ウェスト,540;cm,
基礎,ヒップ,725;cm,

能力,身体,10,
能力,器用,15,
能力,知識,35,
能力,観察,30,
能力,社交,40,
能力,歌唱,30,
能力,料理,5,
能力,話術,40,
能力,戦闘,5,
能力,魔術,0,

能力,主導度Ｎ,-300
能力,主導度Ｕ,-200
能力,倒錯度,5
能力,野心,10
能力,Ｃ感,4
能力,Ｖ感,4
能力,Ａ感,2
能力,Ｂ感,3
能力,Ｍ感,1
能力,欲望,3
能力,性技,3
能力,性知識,4
能力,奉仕,2
能力,性交,4
能力,露出,2
能力,精愛,2
能力,マゾ,1
能力,肝臓,0

素質,性別,1,
素質,処女,0,
素質,キス未経験,0,
素質,アナル処女,0,

素質,臆病,1,
素質,素直,1,
素質,プライド低い,1,
素質,恥薄い,1,
素質,痛みに強い,1,

素質,Ｖ敏感,1,
素質,Ａ鈍感,1,

素質,成長型,6,
素質,性格,0,
素質,髪色,0xFFEA91,
素質,髪の長さ,5,
素質,姓名逆転,1,
CFLAG,口上カラーコード,0xFFEA91,

素質,Ｖ締まり,550,
素質,Ａ締まり,900,
素質,陰毛現在値,3,
素質,陰毛目標値,3,
素質,腋毛現在値,3,
素質,腋毛目標値,3,
素質,バストサイズ,-1,
素質,ヒップサイズ,-1,
素質,体型,0,
素質,体格,0,

素質,職業,32,; 変数JOB_NAME 参照

経験,絶頂経験,40
経験,苦痛快楽経験,10
経験,膣内射精経験,40
経験,腸内射精経験,22
経験,口内射精経験,48
経験,キス経験,18
経験,口淫経験,50
経験,Ｖ性交経験,50
経験,Ａ性交経験,20
経験,輪姦経験,3
経験,売春経験,40

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリ　と対応
CSTR,100,リボン,;頭
CSTR,101,首輪,;首
CSTR,102,なし,;上服
CSTR,103,なし,;下服
CSTR,104,なし,;上着
CSTR,105,ぼろぼろの布切れ,;上下服
CSTR,106,さらし,;下着上
CSTR,107,ドロワーズ,;下着下
CSTR,108,なし;上下下着,
CSTR,109,なし,;腕
CSTR,110,なし,;靴下
CSTR,111,草履,;靴
CSTR,112,なし,;アクセサリ

;[ポートレイトパーツ情報]キャラ情報の[ポートレイト・口上編集]から出力可能
CSTR,120,CC1_後髪_1
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_1
CSTR,123,CC1_瞳_1
CSTR,124,CC1_目_1
CSTR,128,CC1_服_下着_0
CSTR,129,CC1_前髪_24
CSTR,138,CC1_首飾_首輪_0
CSTR,150,132:72:48
CSTR,151,
CSTR,152,
CSTR,153,120:156:212
CSTR,154,
CSTR,158,
CSTR,159,132:72:48
CSTR,168,


code:
番号,16,
名前,フレーヴェ,
呼び名,フレーヴェ,
CSTR,0,アイゼン
CSTR,1,フレーヴェ
CSTR,3,フレーヴェ
CSTR,4,フレーヴェ
CSTR,5,アイゼン
CSTR,6,フレーヴェ
CSTR,7,フレーヴェ
CSTR,8,人間,ドワーフ
CSTR,99,フレーヴェ

;eraは小数を読み込めないためいずれも一の位を小数第一位として扱う
;174.5cmは1745、54.2kgは542とする
基礎,身長,1437;cm
基礎,体重,395;kg
基礎,バスト,785;cm
基礎,ウェスト,619;cm
基礎,ヒップ,850;cm

基礎,体力,1200
基礎,気力,1800
基礎,精神力,2500

能力,身体,5
能力,器用,50
能力,知識,85
能力,観察,100
能力,社交,20
能力,歌唱,0
能力,料理,0
能力,話術,10
能力,戦闘,5
能力,魔術,5

能力,主導度Ｎ,0
能力,主導度Ｕ,0
能力,倒錯度,0
能力,野心,80
能力,性知識,1
能力,肝臓,0

素質,性別,1
素質,キス未経験,1

素質,気丈,1
素質,プライド高い,1
素質,好奇心,1
素質,楽観的,1
素質,貞操無頓着,1
素質,恥薄い,1
素質,サボり魔,1
素質,習得早い,1
素質,自慰しやすい,1
素質,汚れ無視,1
素質,快感に素直,1
素質,中毒しやすい,1
素質,Ｃ鈍感,1
素質,Ｖ敏感,1
素質,Ｂ鈍感,1

素質,技師,1

素質,成長型,2
素質,性格,4
素質,髪色,0xE6E6E6
素質,髪の長さ,5
素質,姓名逆転,1

素質,Ｖ締まり,800
素質,Ａ締まり,800
素質,陰毛現在値,3
素質,陰毛目標値,6
素質,腋毛現在値,0
素質,腋毛目標値,2
素質,バストサイズ,1
素質,ヒップサイズ,1
素質,体型,1
素質,体格,-1

素質,職業,10;魔導工学者

経験,絶頂経験,20
経験,異常経験,1
;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリ　と対応
CSTR,100,なし,;頭
CSTR,101,なし,;首
CSTR,102,タンクトップ,;上服
CSTR,103,ホットパンツ,;下服
CSTR,104,白衣,;上着
CSTR,105,なし,;上下服
CSTR,106,なし,;下着上
CSTR,107,Ｔバック,;下着下
CSTR,108,なし;上下下着
CSTR,109,指抜きグローブ,;腕
CSTR,110,サイハイソックス,;靴下
CSTR,111,ロングブーツ,;靴
CSTR,112,ゴーグル,;アクセサリ
CSTR,113,戦鎚,;武器（武器というより工具的な）

;[ポートレイトパーツ情報]CharaN_キャラ名.csvに貼り付けて使用
CSTR,120,CC1_後髪_13
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_1
CSTR,123,CC1_瞳_2
CSTR,124,CC1_目_2
CSTR,128,CC1_服_下着_1
CSTR,129,CC1_前髪_22
CSTR,130,CC1_眉_1
CSTR,133,CC1_アクセサリ1_その他_3
CSTR,150,276:124:100
CSTR,151,
CSTR,152,
CSTR,153,桃
CSTR,154,
CSTR,158,
CSTR,159,276:124:100
CSTR,160,264:112:100
CSTR,163,


code:
番号,17,
名前,アルノー,
呼び名,アルノー,
CSTR,0,ルコント
CSTR,1,アルノー
CSTR,3,アルノー
CSTR,4,アルノー
CSTR,5,ルコント
CSTR,6,アルノー
CSTR,7,アルノー
CSTR,8,人間
CSTR,99,アルノー

基礎,体力,1900
基礎,気力,1800
基礎,精神力,1500

;eraは小数を読み込めないためいずれも一の位を小数第一位として扱う
;174.5cmは1745、54.2kgは542とする
基礎,身長,156;cm,
基礎,体重,54;kg,
基礎,バスト,773;cm,
基礎,ウェスト,644;cm,
基礎,ヒップ,820;cm,
基礎,ペニス,90;cm,

能力,身体,25,
能力,器用,30,
能力,知識,10,
能力,観察,25,
能力,社交,10,
能力,歌唱,15,
能力,料理,30,
能力,話術,20,
能力,戦闘,20,

能力,主導度Ｎ,0
能力,主導度Ｕ,0
能力,倒錯度,200
能力,野心,15
能力,性知識,2
能力,肝臓,0

素質,性別,0,
素質,処女,1,
素質,キス未経験,1,
素質,アナル処女,1,
素質,童貞,1,

素質,生意気,1,
素質,プライド低い,1,
素質,好奇心,1,
素質,恥じらい,1,
素質,痛みに強い,1,
素質,習得早い,1,
素質,献身的,1,
素質,下戸,1,

素質,Ｃ敏感,1,

素質,成長型,8,
素質,性格,0,
素質,髪色,0x60848C,
素質,髪の長さ,2,
素質,姓名逆転,1,
CFLAG,口上カラーコード,0x7bb3b0,

素質,Ｖ締まり,800,
素質,Ａ締まり,800,
素質,陰毛現在値,1,
素質,陰毛目標値,1,
素質,腋毛現在値,0,
素質,腋毛目標値,0,
素質,体型,0,
素質,体格,-1,
素質,ペニスサイズ,-1,

素質,職業,23,; 変数JOB_NAME 参照

経験,絶頂経験,3

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリ　と対応
CSTR,100,なし,;頭
CSTR,101,リボン,;首
CSTR,102,なし,;上服
CSTR,103,なし,;下服
CSTR,104,なし,;上着
CSTR,105,燕尾服,;上下服
CSTR,106,なし,;下着上
CSTR,107,ボクサー,;下着下
CSTR,108,なし;上下下着,
CSTR,109,カフス,;腕
CSTR,110,靴下,;靴下
CSTR,111,シューズ,;靴
CSTR,112,なし,;アクセサリ

;[ポートレイトパーツ情報]CharaN_キャラ名.csvに貼り付けて使用
CSTR,120,CC1_後髪_8
CSTR,121,CC1_身体_1
CSTR,122,CC1_顔_0
CSTR,123,CC1_瞳_7
CSTR,124,CC1_目_7
CSTR,128,CC1_服_ブラウス_4
CSTR,129,CC1_前髪_17
CSTR,130,CC1_眉_3
CSTR,137,CC1_化粧_目元_0
CSTR,150,132:144:164
CSTR,151,292:264:256
CSTR,152,292:264:256
CSTR,153,144:188:208
CSTR,154,
CSTR,158,
CSTR,159,132:144:164
CSTR,160,黒
CSTR,167,392:184:92


code:
番号,18,
名前,アーレン,
呼び名,アーレン,
CSTR,0,ランベルス
CSTR,1,アーレン
CSTR,3,アーレン
CSTR,4,アーレン
CSTR,5,ランベルス
CSTR,6,アーレン
CSTR,7,アーレン
CSTR,8,亜人;設定上はハーフ
CSTR,99,UC_アーレン

基礎,体力,2200,
基礎,気力,1800
基礎,精神力,1500

基礎,身長,165.4;cm,
基礎,体重,56.1;kg,
基礎,バスト,82.7;cm,
基礎,ウェスト,67.9;cm,
基礎,ヒップ,88.2;cm
基礎,ペニス,11.9;cm,

能力,身体,50,
能力,器用,40,
能力,知識,20,
能力,社交,30,
能力,観察,60,
能力,歌唱,15,
能力,料理,15,
能力,話術,30,
能力,戦闘,50,

能力,主導度Ｎ,100
能力,主導度Ｕ,50
能力,倒錯度,100

能力,Ｃ感,1,
能力,欲望,1,
能力,性知識,1,
能力,自慰,1,
能力,射精,1,
能力,露出,1,

素質,性別,0,
素質,童貞,1,
素質,キス未経験,1,
素質,アナル処女,1,

素質,生意気,
素質,楽観的,
素質,目立ちたがり,
素質,貞操無頓着,
素質,Ｃ敏感,
素質,Ａ敏感,
素質,回復早い,
素質,動物耳,1
素質,しっぽ,1

素質,成長型,4,

素質,性格,4,
素質,姓名逆転,1,

素質,Ａ締まり,800,;ぎちぎち
素質,陰毛現在値,3,;ふんわり
素質,陰毛目標値,3,:

素質,危険日,1,

素質,腋毛現在値,2,;うっすら
素質,腋毛目標値,2,

素質,職業,35,;(元)マフィア

CFLAG,口上カラーコード,0xFF516E,

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリと対応

CSTR,100,なし,;頭
CSTR,101,なし,;首
CSTR,102,ノースリーブ,;上服
CSTR,103,カーゴパンツ,;下服
CSTR,104,ジャケット,;上着
CSTR,105,なし,;上下服
CSTR,106,なし,;下着上
CSTR,107,ボクサー,;下着下
CSTR,108,なし,;上下下着
CSTR,109,指抜きグローブ,;腕
CSTR,110,靴下,;靴下
CSTR,111,シューズ,;靴
CSTR,112,ドッグタグ,;アクセサリ

;[ポートレイトパーツ情報]
CSTR,120,CC1_後髪_6
CSTR,121,CC1_身体_1
CSTR,122,CC1_顔_0
CSTR,123,CC1_瞳_0
CSTR,124,CC1_目_7
CSTR,127,CC1_口_3
CSTR,128,CC1_服_鎧_3
CSTR,129,CC1_前髪_25
CSTR,130,CC1_眉_1
CSTR,131,CC1_頭部位_ケモミミ_1
CSTR,150,赤
CSTR,151,
CSTR,152,
CSTR,153,緑
CSTR,154,
CSTR,157,
CSTR,158,
CSTR,159,赤
CSTR,160,
CSTR,161,赤


code:
番号,19,
名前,フィーネ,
呼び名,フィーネ,
CSTR,0,フレルール
CSTR,3,フィーネ,
CSTR,4,フィーネ
CSTR,5,フレルール,
CSTR,6,フィーネ
CSTR,7,フィーネ,
CSTR,8,人間
CSTR,99,フィーネ

基礎,体力,1400,
基礎,気力,1300,
基礎,精神力,1500,

基礎,身長,155.4,;cm
基礎,体重,51.9,;kg
基礎,バスト,79.1,;cm
基礎,ウェスト,61.4,;cm
基礎,ヒップ,84.7,;cm

能力,身体,5,
能力,器用,10,
能力,知識,35,
能力,社交,35,
能力,観察,15,
能力,歌唱,10,
能力,料理,5,
能力,話術,30,
能力,戦闘,5,

素質,性別,1,
素質,処女,1,
素質,キス未経験,1,
素質,アナル処女,1,

素質,気丈,1,
素質,プライド高い,1,
素質,ツンデレ,1,
素質,貞操観念,1,
素質,恥じらい,1,
素質,痛みに弱い,1,
素質,習得早い,1,
素質,献身的,1,
素質,Ｍ気質,1,
素質,Ａ敏感,1,
素質,美脚,1,
素質,美尻,1,
素質,Ｕ敏感,1,
素質,孕み可能,1,

素質,成長型,6,
素質,姓名逆転,1,

素質,Ｖ締まり,550,
素質,Ａ締まり,550,
素質,陰毛現在値,1,
素質,陰毛目標値,1,
素質,職業,1,

素質,危険日,4,

CFLAG,口上カラーコード,0xC0C0C0,

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリと対応
CSTR,100,なし,;頭
CSTR,101,なし,;首
CSTR,102,ブラウス,;上服
CSTR,103,ロングスカート,;下服
CSTR,104,マント,;上着
CSTR,105,なし,;上下服
CSTR,106,コルセット,;下着上
CSTR,107,ドロワーズ,;下着下
CSTR,108,なし,;上下下着
CSTR,109,サテングローブ,;腕
CSTR,110,ニーハイソックス,;靴下
CSTR,111,ミュール,;靴
CSTR,112,ガーター,;アクセサリ

;[ポートレイトパーツ情報]
CSTR,120,CC1_後髪_5
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_0
CSTR,123,CC1_瞳_0
CSTR,124,CC1_目_6
CSTR,128,CC1_服_ケープ_0
CSTR,129,CC1_前髪_19
CSTR,130,CC1_眉_3
CSTR,150,黄
CSTR,151,
CSTR,152,
CSTR,153,青
CSTR,154,
CSTR,158,
CSTR,159,黄
CSTR,160,


code:
番号,1,
名前,リュミエール,
呼び名,リュミエール,
CSTR,0,ハーカー
CSTR,1,リュミエール
CSTR,3,リュミエール
CSTR,4,リュミエール
CSTR,5,ハーカー
CSTR,6,リュミエール
CSTR,7,リュミエール
CSTR,8,人間
CSTR,99,リュミエール

基礎,体力,2000
基礎,気力,1500
基礎,精神力,1400

;eraは小数を読み込めないためいずれも一の位を小数第一位として扱う
;174.5cmは1745、54.2kgは542とする
基礎,身長,1745 ;cm
基礎,体重,542;kg
基礎,バスト,880;cm
基礎,ウェスト,572;cm
基礎,ヒップ,766;cm

能力,身体,35
能力,器用,35
能力,知識,20
能力,観察,20
能力,社交,20
能力,歌唱,20
能力,料理,55
能力,話術,35
能力,戦闘,40

能力,主導度Ｎ,0
能力,主導度Ｕ,0
能力,倒錯度,0
能力,野心,15
能力,性知識,1
能力,肝臓,0

素質,性別,1
素質,処女,1
素質,キス未経験,1
素質,アナル処女,1

素質,献身的,1
素質,感情乏しい,1
素質,抑圧,1
素質,一線越えない,1
素質,痛みに強い,1
素質,Ｍ気質,1

素質,Ｂ敏感,1

素質,成長型,8
素質,性格,2
素質,髪色,0xffe0b2
素質,髪の長さ,4
素質,姓名逆転,1

素質,Ｖ締まり,850
素質,Ａ締まり,900
素質,陰毛現在値,0
素質,陰毛目標値,0
素質,腋毛現在値,0
素質,腋毛目標値,0
素質,バストサイズ,1
素質,ヒップサイズ,0
素質,体型,0
素質,体格,0
素質,美脚,1

素質,職業,12

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリ　と対応
CSTR,100,髪飾り,;頭
CSTR,101,リボン,;首
CSTR,102,なし,;上服
CSTR,103,なし,;下服
CSTR,104,なし,;上着
CSTR,105,メイド服,;上下服
CSTR,106,ブラ,;下着上
CSTR,107,パンティ,;下着下
CSTR,108,なし;上下下着
CSTR,109,なし,;腕
CSTR,110,ストッキング,;靴下
CSTR,111,パンプス,;靴
CSTR,112,なし,;アクセサリ


code:
番号,20,
名前,レオノーラ,
呼び名,レオノーラ,
CSTR,姓,ルクレール,
CSTR,名,レオノーラ,
CSTR,姓カナ,ルクレール,
CSTR,名カナ,レオノーラ,
CSTR,愛称,レオノーラ,
CSTR,識別名,UC_レオノーラ,

基礎,体力,2000,
基礎,気力,2200,
基礎,精神力,2000,
基礎,身長,173.4,
基礎,体重,59.9,
基礎,バスト,99.2,
基礎,ウェスト,62.1,
基礎,ヒップ,89.1,

能力,Ｃ感,1,
能力,Ｖ感,1,
能力,欲望,1,
能力,性技,2,
能力,性知識,4,
能力,奉仕,2,
能力,性交,1,
能力,身体,50,
能力,器用,50,
能力,知識,45,
能力,社交,65,
能力,観察,35,
能力,歌唱,10,
能力,話術,60,
能力,戦闘,55,

素質,性別,1,
素質,アナル処女,1,
素質,気丈,1,
素質,プライド低い,1,
素質,楽観的,1,
素質,解放,1,
素質,献身的,1,
素質,汚れ無視,1,
素質,快感に素直,1,
素質,両刀,1,
素質,Ａ敏感,1,
素質,Ｂ鈍感,1,
素質,動物耳,1,
素質,しっぽ,1,
素質,成長型,8,
素質,姓名逆転,1,
素質,Ｖ締まり,650,
素質,Ａ締まり,750,
素質,陰毛現在値,2,
素質,陰毛目標値,2,
素質,危険日,2,
素質,腋毛現在値,1,
素質,腋毛目標値,1,
素質,バストサイズ,1,
素質,体格,1,
素質,元性別,11,
素質,職業,5,

経験,絶頂経験,20,
経験,苦痛快楽経験,8,
経験,膣内射精経験,4,
経験,口内射精経験,18,
経験,キス経験,9,
経験,口淫経験,34,
経験,Ｖ性交経験,12,

CFLAG,口上カラーコード,0xCCC498,

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリと対応
CSTR,100,なし,;頭
CSTR,101,リボン,;首
CSTR,102,ワイシャツ,;上服
CSTR,103,スラックス,;下服
CSTR,104,ファーコート,;上着
CSTR,105,なし,;上下服
CSTR,106,トップレスコルセット,;下着上
CSTR,107,Ｔバック,;下着下
CSTR,108,なし,;上下下着
CSTR,109,カフス,;腕
CSTR,110,ストッキング,;靴下
CSTR,111,ハイヒール,;靴
CSTR,112,眼鏡,;アクセサリ

;[ポートレイトパーツ情報]
CSTR,120,CC1_後髪_9
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_0
CSTR,123,CC1_瞳_0
CSTR,124,CC1_目_8
CSTR,127,CC1_口_4
CSTR,128,CC1_服_ブラウス_0
CSTR,129,CC1_前髪_11
CSTR,130,CC1_眉_4
CSTR,131,CC1_頭部位_ケモミミ_0
CSTR,136,CC1_眼鏡_眼鏡_7
CSTR,138,CC1_首飾_首飾_7
CSTR,139,CC1_エクステ_4
CSTR,141,CC1_マスク1_目元_0
CSTR,145,CC1_インナーヘア_0
CSTR,150,264:248:220
CSTR,151,268:268:264
CSTR,152,268:268:264
CSTR,153,268:320:324
CSTR,154,
CSTR,157,
CSTR,158,292:300:264
CSTR,159,264:248:220
CSTR,160,264:248:220
CSTR,161,264:248:220
CSTR,166,
CSTR,168,80:80:68
CSTR,169,264:248:220
CSTR,171,496:384:244
CSTR,175,284:256:228


code:
番号,21,
名前,ルミナ,
呼び名,ルミナ,
CSTR,0,バーレスト
CSTR,1,ルミナ
CSTR,3,ルミナ
CSTR,4,ルミナ
CSTR,5,バーレスト
CSTR,6,ルミナ
CSTR,7,ルミナ
CSTR,8,人間
CSTR,99,UC_ルミナ

基礎,体力,2200,
基礎,気力,1900
基礎,精神力,1700

;小数点以下は切り捨てられるらしいけどなんとなく残しておく
基礎,身長,172.8
基礎,体重,60.1
基礎,バスト,97.9
基礎,ウェスト,63.9
基礎,ヒップ,86.9

能力,身体,60,
能力,器用,50,
能力,知識,20,
能力,社交,45,
能力,観察,40,
能力,歌唱,10,
能力,料理,10,
能力,話術,30,
能力,戦闘,55,

能力,主導度Ｎ,100
能力,主導度Ｕ,50
能力,倒錯度,100

能力,性知識,1,

素質,性別,1,
素質,処女,1,
素質,キス未経験,1,
素質,アナル処女,1,

素質,気丈,1,
素質,自制心,1,
素質,楽観的,1,
素質,痛みに強い,1,
素質,汚れ無視,1,
素質,両刀,1,
素質,Ａ敏感,1,
素質,美脚,1,
素質,教導,1,

素質,成長型,4,

素質,性格,2,
素質,姓名逆転,1

素質,Ｖ締まり,550,
素質,Ａ締まり,550,
素質,陰毛現在値,4,;標準
素質,陰毛目標値,4,
素質,危険日,1,
素質,腋毛現在値,0,
素質,腋毛目標値,0,
素質,バストサイズ,1,
素質,体格,1,
素質,元性別,11,
素質,職業,5,;傭兵

CFLAG,口上カラーコード,0xFFE599,

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリと対応
CSTR,100,なし,;頭
CSTR,101,ペンダント,;首
CSTR,102,Ｔシャツ,;上服
CSTR,103,なし,;下服
CSTR,104,レザージャケット,;上着
CSTR,105,なし,;上下服
CSTR,106,ブラ,;下着上
CSTR,107,スパッツ,;下着下
CSTR,108,なし,;上下下着
CSTR,109,レザーグローブ,;腕
CSTR,110,サイハイソックス,;靴下
CSTR,111,レザーブーツ,;靴
CSTR,112,ナイフ,;アクセサリ

;[ポートレイトパーツ情報]
CSTR,120,CC1_後髪_9
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_0
CSTR,123,CC1_瞳_0
CSTR,124,CC1_目_8
CSTR,128,CC1_服_平服_3
CSTR,129,CC1_前髪_15
CSTR,130,CC1_眉_1
CSTR,150,黄
CSTR,151,褐色
CSTR,152,褐色
CSTR,153,赤
CSTR,154,
CSTR,158,白
CSTR,159,黄
CSTR,160,


code:
番号,22,
名前,ディアナ,
呼び名,ディアナ,
CSTR,0,ホプキンズ
CSTR,1,ディアナ
CSTR,3,ディアナ
CSTR,4,ディアナ
CSTR,5,ホプキンズ
CSTR,6,ディアナ
CSTR,7,ディアナ
CSTR,8,人間
;ハーフリングだけど、とりあえず人間
CSTR,99,ディアナ

基礎,体力,1900,
基礎,気力,1500,
基礎,精神力,1500,
基礎,身長,115.9,
基礎,体重,21.5,
基礎,バスト,45.6,
基礎,ウェスト,44.0,
基礎,ヒップ,61.9,

能力,性知識,2,
能力,身体,50,
能力,器用,60,
能力,知識,15,
能力,社交,25,
能力,観察,65,
能力,歌唱,10,
能力,料理,29,
能力,話術,20,
能力,戦闘,45,
能力,主導度Ｎ,100,
能力,主導度Ｕ,-50,
能力,倒錯度,0
能力,野心,10

素質,性別,1,
素質,処女,1,
素質,キス未経験,1,
素質,アナル処女,1,
素質,素直,1,
素質,好奇心,1,
素質,楽観的,1,
素質,一線越えない,1,
;コンプレックスの現れ。こんなボクがあなたに愛されるわけないよね、みたいな。気安いように見えて深いところでは一歩引いてる。
素質,目立ちたがり,1,
素質,汚臭敏感,1,
素質,快感に素直,1,
素質,強運,1,
素質,成長型,4,
素質,姓名逆転,1,
素質,Ｖ締まり,950,
素質,Ａ締まり,950,
素質,バストサイズ,-1,
素質,体格,-2,
素質,体型,-1,
素質,職業,4,

CFLAG,口上カラーコード,0xFFE599,

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリと対応
CSTR,100,なし,;頭
CSTR,101,なし,;首
CSTR,102,パーカー,;上服
CSTR,103,ショートパンツ,;下服
CSTR,104,マント,;上着
CSTR,105,なし,;上下服
CSTR,106,スポーツブラ,;下着上
CSTR,107,スパッツ,;下着下
CSTR,108,なし,;上下下着
CSTR,109,なし,;腕
CSTR,110,足袋,;靴下
CSTR,111,シューズ,;靴
CSTR,112,なし,;アクセサリ

;[ポートレイトパーツ情報]
CSTR,120,CC1_後髪_0
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_3
CSTR,123,CC1_瞳_0
CSTR,124,CC1_目_9
CSTR,127,CC1_口_1
CSTR,128,CC1_服_平服_3
CSTR,129,CC1_前髪_10
CSTR,130,CC1_眉_3
CSTR,138,CC1_首飾_特殊_0
CSTR,150,300:230:152
CSTR,151,
CSTR,152,
CSTR,153,204:272:436
CSTR,154,
CSTR,157,
CSTR,158,白
CSTR,159,300:230:152
CSTR,160,
CSTR,168,


code:
番号,23,
名前,エレノア,
呼び名,エレノア,
CSTR,0,アーリービアード,
CSTR,1,エレノア,
CSTR,3,エレノア,
CSTR,4,エレノア,
CSTR,5,アーリービアード,
CSTR,6,エレノア,
CSTR,7,エレノア,
CSTR,8,エルフ
CSTR,99,エレノア,
;何か思いついたらユニーク化するかもしれない……?

基礎,体力,3000,
基礎,気力,3600,
基礎,精神力,2000,
基礎,身長,174.2,
基礎,体重,56.1,
基礎,バスト,80.0,
基礎,ウェスト,59.9,
基礎,ヒップ,82.2,

能力,性技,5,
能力,性知識,4,
能力,奉仕,6,
能力,身体,67,
能力,器用,83,
能力,知識,145,
能力,社交,52,
能力,魔術,150,
能力,観察,62,
能力,歌唱,95,
能力,料理,71,
能力,話術,61,
能力,戦闘,85,
能力,主導度Ｎ,-150,
能力,主導度Ｕ,-50,
能力,倒錯度,0
能力,野心,10

素質,性別,1,
素質,アナル処女,1,
素質,気丈,1,
素質,自制心,1,
素質,保守的,1,
素質,一線越えない,1,
素質,恥薄い,1,
素質,濡れにくい,1,
素質,献身的,1,
素質,汚れ無視,1,
素質,快感の否定,1,
素質,Ｃ鈍感,1,
素質,Ｖ鈍感,1,
素質,Ａ鈍感,1,
素質,Ｂ鈍感,1,
;エルフな上に結構なご高齢なので枯れてます。女として終わってると勘違いしてるエルフをもう一度女にしたいよね
素質,調合,1,
素質,成長型,2,
素質,姓名逆転,1,
素質,Ｖ締まり,750,
素質,Ａ締まり,850,
素質,陰毛現在値,3,
素質,陰毛目標値,3,
素質,危険日,3,
素質,腋毛現在値,1,
素質,腋毛目標値,1,
素質,バストサイズ,-1,
素質,ヒップサイズ,-1,
素質,体型,-2,
素質,職業,29,

CFLAG,口上カラーコード,0x24A884,

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリと対応
CSTR,100,なし,;頭
CSTR,101,なし,;首
CSTR,102,ブラウス,;上服
CSTR,103,ズボン,;下服
CSTR,104,パーカー,;上着
CSTR,105,なし,;上下服
CSTR,106,ブラ,;下着上
CSTR,107,フレアパンティ,;下着下
CSTR,108,なし,;上下下着
CSTR,109,なし,;腕
CSTR,110,ショートソックス,;靴下
CSTR,111,ブーツ,;靴
CSTR,112,なし,;アクセサリ

;[ポートレイトパーツ情報]
CSTR,120,CC1_後髪_0
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_2
CSTR,123,CC1_瞳_0
CSTR,124,CC1_目_8
CSTR,127,CC1_口_2
CSTR,128,CC1_服_ドレス_6
CSTR,129,CC1_前髪_10
CSTR,130,CC1_眉_4
CSTR,132,CC1_帽子_特殊_0
CSTR,136,CC1_眼鏡_眼鏡_7
CSTR,138,CC1_首飾_首飾_4
CSTR,139,CC1_エクステ_1
CSTR,150,96:132:16
CSTR,151,
CSTR,152,
CSTR,153,264:444:240
CSTR,154,
CSTR,157,
CSTR,158,白
CSTR,159,96:132:16
CSTR,160,96:132:16
CSTR,162,栗
CSTR,166,青
CSTR,168,栗
CSTR,169,96:132:16


code:
番号,24,
名前,スフレ,
呼び名,スフレ,
CSTR,0,クローバー,
CSTR,1,スフレ,
CSTR,3,スフレ,
CSTR,4,スフレ,
CSTR,5,クローバー,
CSTR,6,スフレ,
CSTR,7,スフレ,
CSTR,8,人間,
CSTR,99,UC_スフレ,

基礎,体力,2100,
基礎,気力,1700,
基礎,精神力,1900,

;eraは小数を読み込めないためいずれも一の位を小数第一位として扱う
;174.5cmは1745、54.2kgは542とする

基礎,身長,1570,;cm
基礎,体重,490,;cm
基礎,バスト,850,;cm
基礎,ウェスト,580,;cm
基礎,ヒップ,840,;cm

能力,身体,40,
能力,器用,35,
能力,知識,30,
能力,社交,30,
能力,観察,50,
能力,歌唱,100,
能力,料理,35,
能力,話術,30,
能力,戦闘,20,
能力,魔術,15,

能力,主導度Ｎ,50,
能力,主導度Ｕ,0,
能力,倒錯度,0,
能力,野心,20,
能力,性知識,1,

素質,性別,1,
素質,処女,1,
素質,キス未経験,1,
素質,アナル処女,1,

素質,素直,1,
素質,気丈,1,
素質,貞操観念,1,
素質,恥じらい,1,
素質,献身的,1,
素質,Ｍ敏感,1,
素質,Ｖ敏感,1,
素質,Ａ鈍感,1,
素質,美脚,1,
素質,魅惑,1,
素質,下戸,1,

素質,成長型,7,
素質,姓名逆転,1,
素質,Ｖ締まり,950,
素質,Ａ締まり,950,
素質,陰毛現在値,2,
素質,陰毛目標値,2,
素質,腋毛現在値,1,
素質,腋毛目標値,1,
素質,バストサイズ,1,
素質,ヒップサイズ,0,
素質,体型,0,
素質,体格,0,
素質,性格,1,

素質,元性別,11,
素質,職業,19,
素質,髪色,桃,
素質,髪の長さ,5,

CFLAG,好感度,50

CFLAG,口上カラーコード,0xFF99FF,

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリと対応
CSTR,100,髪飾り,;頭
CSTR,101,なし,;首
CSTR,102,なし,;上服
CSTR,103,なし,;下服
CSTR,104,なし,;上着
CSTR,105,ドレス,;上下服
CSTR,106,レースブラ,;下着上
CSTR,107,レースパンティ,;下着下
CSTR,108,なし,;上下下着
CSTR,109,手袋,;腕
CSTR,110,ニーソックス,;靴下
CSTR,111,踊り子のブーツ,;靴
CSTR,112,ガーター,;アクセサリ

;[ポートレイトパーツ情報]
CSTR,120,CC1_後髪_4
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_0
CSTR,123,CC1_瞳_1
CSTR,124,CC1_目_1
CSTR,127,CC1_口_0
CSTR,128,CC1_服_ドレス_6
CSTR,129,CC1_前髪_1
CSTR,130,CC1_眉_0
CSTR,133,CC1_アクセサリ1_コサージュ_3
CSTR,138,CC1_首飾_首飾_1
CSTR,150,桃
CSTR,151,
CSTR,152,
CSTR,153,桃
CSTR,154,
CSTR,157,
CSTR,158,
CSTR,159,桃
CSTR,160,
CSTR,163,


code:
番号,26,
名前,アステ,
呼び名,アステ,
CSTR,0,,
CSTR,1,アステ,
CSTR,2,,
CSTR,3,アステ,
CSTR,4,アステ,
CSTR,5,,
CSTR,6,アステ,
CSTR,7,アステ,
CSTR,8,亜人,;外見的には。中身的には…？
CSTR,99,UC_アステ,

基礎,体力,3500,
基礎,気力,3000,
基礎,精神力,2500,

;eraは小数を読み込めないためいずれも一の位を小数第一位として扱う
;174.5cmは1745、54.2kgは542とする
基礎,身長,1555;cm,
基礎,体重,523;kg,
基礎,バスト,783;cm,
基礎,ウェスト,520;cm,
基礎,ヒップ,718;cm,

能力,身体,85,
能力,器用,15,
能力,知識,5,
能力,観察,35,
能力,社交,1,
能力,歌唱,25,
能力,料理,5,
能力,話術,1,
能力,戦闘,80,
能力,魔術,55,

能力,主導度Ｎ,0
能力,主導度Ｕ,100
能力,倒錯度,0
能力,野心,50
能力,Ｃ感,0
能力,Ｖ感,0
能力,Ａ感,0
能力,Ｂ感,0
能力,Ｍ感,0
能力,欲望,0
能力,性技,0
能力,性知識,0
能力,奉仕,0
能力,性交,0
能力,露出,3
能力,精愛,0
能力,マゾ,0
能力,肝臓,5

素質,性別,1,
素質,処女,1,
素質,キス未経験,1,
素質,アナル処女,1,

素質,素直,1,
素質,孤高,1,
素質,恥薄い,1,
素質,痛みに強い,1,
素質,習得早い,1,

素質,Ｖ敏感,1,
素質,Ａ鈍感,1,

素質,絶倫,1,
素質,しっぽ,1,

素質,成長型,12,
素質,性格,4,
素質,髪色,0x7E7C80,
素質,髪の長さ,4,
素質,姓名逆転,1,
CFLAG,口上カラーコード,0xDEB0B3,

素質,Ｖ締まり,900,
素質,Ａ締まり,950,
素質,陰毛現在値,0,
素質,陰毛目標値,0,
素質,腋毛現在値,0,
素質,腋毛目標値,0,
素質,バストサイズ,-1,
素質,ヒップサイズ,0,
素質,体型,-1,
素質,体格,-1,

素質,職業,0,;無職

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリ　と対応
CSTR,100,なし,;頭
CSTR,101,管理タグ,;首
CSTR,102,なし,;上服
CSTR,103,なし,;下服
CSTR,104,ファーコート,;上着
CSTR,105,ぼろぼろの布切れ,;上下服
CSTR,106,なし,;下着上
CSTR,107,なし,;下着下
CSTR,108,ラバースーツ,;上下下着
CSTR,109,包帯,;腕
CSTR,110,アンクレット,;靴下
CSTR,111,なし,;靴
CSTR,112,なし,;アクセサリ

;[ポートレイトパーツ情報]キャラ情報の[ポートレイト・口上編集]から出力可能
CSTR,120,CC1_後髪_14
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_1
CSTR,123,CC1_瞳_0
CSTR,124,CC1_目_12
CSTR,127,CC1_口_1
CSTR,128,CC1_服_特殊_2
CSTR,129,CC1_前髪_7
CSTR,130,CC1_眉_1
CSTR,131,CC1_頭部位_ケモミミ_7
CSTR,137,CC1_化粧_目元_1
CSTR,138,CC1_首飾_首飾_7
CSTR,145,CC1_インナーヘア_0
CSTR,150,252:248:256
CSTR,151,
CSTR,152,
CSTR,153,348:128:140
CSTR,154,
CSTR,157,
CSTR,158,116:116:120
CSTR,159,252:248:256
CSTR,160,252:248:256
CSTR,161,252:248:256
CSTR,167,492:328:312
CSTR,168,橙
CSTR,175,188:60:28


code:
番号,28,
名前,オレーシャ,
呼び名,オレーシャ,
CSTR,0,ヴェナトール
CSTR,1,オレーシャ
CSTR,3,オレーシャ
CSTR,4,オレーシャ
CSTR,5,ヴェナトール
CSTR,6,オレーシャ
CSTR,7,オレーシャ
CSTR,8,人間
CSTR,98,オレーシャ
CSTR,99,UC_オレーシャ

基礎,体力,2200
基礎,気力,2100
基礎,精神力,2000

基礎,身長,153;cm
基礎,体重,47.5;kg
基礎,バスト,74.3;cm
基礎,ウェスト,54.9;cm
基礎,ヒップ,81.2;cm

能力,身体,40
能力,器用,60
能力,知識,40
能力,観察,70
能力,社交,10
能力,歌唱,15
能力,料理,30
能力,話術,10
能力,戦闘,30

能力,主導度Ｎ,0
能力,主導度Ｕ,0
能力,倒錯度,0
能力,野心,15
能力,性知識,1
能力,肝臓,3

素質,性別,1
素質,処女,1
素質,キス未経験,1
素質,アナル処女,1

素質,気丈,1
素質,大人しい,1
素質,好奇心,1
素質,貞操観念,1
素質,孤高,1
素質,痛みに強い,1
素質,濡れやすい,1
素質,献身的,1
素質,汚臭敏感,1
素質,Ｍ敏感,1
素質,美尻,1

素質,成長型,5 ,;参謀
素質,性格,1
素質,髪色,0xB4DCC8
素質,髪の長さ,4
素質,姓名逆転,1
CFLAG,口上カラーコード,0xB4DCC8

素質,Ｖ締まり,900
素質,Ａ締まり,950
素質,陰毛現在値,0
素質,陰毛目標値,0
素質,腋毛現在値,0
素質,腋毛目標値,0
素質,バストサイズ,-1 ,;貧乳
素質,ヒップサイズ,0
素質,体型,-1 ,;スレンダー
素質,体格,0

素質,職業,36,; 村人　変数JOB_NAME 参照

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリ　と対応
CSTR,100,帽子,;頭
CSTR,101,なし,;首
CSTR,102,セーター,;上服
CSTR,103,キュロット,;下服
CSTR,104,ファーコート,;上着
CSTR,105,なし,;上下服
CSTR,106,スポーツブラ,;下着上
CSTR,107,パンティ,;下着下
CSTR,108,なし;上下下着
CSTR,109,手袋,;腕
CSTR,110,ストッキング,;靴下
CSTR,111,ブーツ,;靴
CSTR,112,眼鏡,;アクセサリ

;[ポートレイトパーツ情報]CharaN_キャラ名.csvに貼り付けて使用
CSTR,120,CC1_後髪_17
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_0
CSTR,123,CC1_瞳_1
CSTR,124,CC1_目_1
CSTR,128,CC1_服_平服_4
CSTR,129,CC1_前髪_22
CSTR,132,CC1_帽子_帽子_4
CSTR,136,CC1_眼鏡_眼鏡_6
CSTR,138,CC1_首飾_首飾_5
CSTR,139,CC1_エクステ_3
CSTR,150,256:268:260
CSTR,151,
CSTR,152,
CSTR,153,256:276:420
CSTR,154,
CSTR,158,白
CSTR,159,256:264:260
CSTR,162,
CSTR,163,256:256:256
CSTR,166,
CSTR,168,栗
CSTR,169,256:268:260


code:
番号,29,
名前,ロイド,
呼び名,ロイド,
CSTR,0,ストラウド,
CSTR,1,ロイド,
CSTR,3,ロイド,
CSTR,4,ロイド,
CSTR,5,ストラウド,
CSTR,6,ロイド,
CSTR,7,ロイド,
CSTR,8,魔族,人間
CSTR,99,UC_ロイド,

基礎,体力,4300,
基礎,気力,4000,
基礎,精神力,1000,
;いろいろあってメンタルが不安定
基礎,身長,178.2,
基礎,体重,62.5,
基礎,バスト,87.6,
基礎,ウェスト,74.2,
基礎,ヒップ,83.1,
基礎,ペニス,19.0,

能力,性知識,2,
能力,肝臓,2,
能力,身体,103,
能力,器用,89,
能力,知識,10,
;数百年後の知識なんて知るわけない
能力,社交,44,
能力,魔術,20,
能力,観察,130,
;目がいい。見えないものが見えるくらいには
能力,歌唱,17,
能力,料理,51,
能力,話術,32,
能力,戦闘,125,
能力,主導度Ｎ,-100,
能力,主導度Ｕ,-50,

素質,処女,1,
素質,童貞,1,
素質,キス未経験,1,
素質,アナル処女,1,
素質,悲観的,1,
素質,一線越えない,1,
素質,痛みに強い,1,
素質,習得早い,1,
素質,献身的,1,
素質,快感の否定,1,
素質,中毒しやすい,1,
素質,謎の魅力,1,
;素質,酒豪,1,
;経歴の変更に伴い酒豪設定は消え失せた
素質,魔術師,1,
;魔術に忌避感あり
素質,成長型,9,
素質,姓名逆転,1,
素質,Ｖ締まり,850,
素質,Ａ締まり,850,
素質,陰毛現在値,3,
素質,陰毛目標値,3,
素質,腋毛現在値,1,
素質,腋毛目標値,1,
素質,ペニスサイズ,1,
素質,体格,1,
素質,体型,-1,
素質,職業,13,

CFLAG,口上カラーコード,0xFFF420,

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリと対応
CSTR,100,なし,;頭
CSTR,101,なし,;首
CSTR,102,黒インナー,;上服
CSTR,103,ズボン,;下服
CSTR,104,鎧,;上着
CSTR,105,なし,;上下服
CSTR,106,なし,;下着上
CSTR,107,ブリーフ,;下着下
CSTR,108,なし,;上下下着
CSTR,109,なし,;腕
CSTR,110,靴下,;靴下
CSTR,111,ブーツ,;靴
CSTR,112,なし,;アクセサリ

;[ポートレイトパーツ情報]
CSTR,120,CC1_後髪_6
CSTR,121,CC1_身体_1
CSTR,122,CC1_顔_4
CSTR,123,CC1_瞳_0
CSTR,124,CC1_目_7
;ハート目だと面白いことになるけどまぁ気にしない方針で。髪も金髪に差し戻し
CSTR,126,CC1_鼻_2
CSTR,127,CC1_口_5
CSTR,128,CC1_服_鎧_2
CSTR,129,CC1_前髪_14
CSTR,130,CC1_眉_1
CSTR,150,288:220:104
CSTR,151,288:256:256
CSTR,152,288:256:256
CSTR,153,220:300:432
CSTR,154,
CSTR,156,
CSTR,157,
CSTR,158,
CSTR,159,288:220:104
CSTR,160,
CSTR,181,[FACE_PARTS_OFFSET_X:-34][FACE_PARTS_SIZE_MOD_X:55]
CSTR,183,[FACE_PARTS_OFFSET_Y:4][FACE_PARTS_SIZE_MOD_X:1][FACE_PARTS_SIZE_MOD_Y:-21]
CSTR,184,[FACE_PARTS_OFFSET_Y:4][FACE_PARTS_SIZE_MOD_X:1][FACE_PARTS_SIZE_MOD_Y:-21]
CSTR,187,[FACE_PARTS_OFFSET_Y:1][FACE_PARTS_SIZE_MOD_X:1][FACE_PARTS_SIZE_MOD_Y:1]
CSTR,188,[FACE_PARTS_OFFSET_X:-34][FACE_PARTS_SIZE_MOD_X:55]
CSTR,189,[FACE_PARTS_OFFSET_Y:-3][FACE_PARTS_SIZE_MOD_Y:-13]
CSTR,190,[FACE_PARTS_OFFSET_Y:-11][FACE_PARTS_SIZE_MOD_X:1][FACE_PARTS_SIZE_MOD_Y:30]


code:
番号,30,
名前,レアンナ,,
呼び名,レアンナ,,
CSTR,0,アナヘイム,
CSTR,1,レアンナ,
CSTR,3,レアンナ,
CSTR,4,レアンナ,
CSTR,5,アナヘイム,
CSTR,6,レアンナ,
CSTR,7,レアンナ,
CSTR,8,霊魂,人間
CSTR,99,UC_レアンナ,

基礎,体力,4000,
基礎,気力,4200,
基礎,精神力,3000,
基礎,身長,168.7,
基礎,体重,59.1,
基礎,バスト,90.9,
基礎,ウェスト,62.1,
基礎,ヒップ,104.1,

能力,性知識,2,
能力,サド,4,
能力,身体,86,
能力,器用,65,
能力,知識,100,
能力,社交,82,
能力,魔術,130,
能力,観察,88,
能力,歌唱,71,
能力,話術,65,
能力,戦闘,125,
能力,主導度Ｎ,250,
能力,主導度Ｕ,300,
能力,倒錯度,300,

素質,性別,1,
素質,処女,1,
素質,童貞,1,
素質,キス未経験,1,
素質,アナル処女,1,
素質,反抗的,1,
素質,プライド高い,1,
素質,孤高,1,
素質,習得早い,1,
素質,汚臭敏感,1,
素質,小悪魔,1,
素質,魅惑,1,
素質,美脚,1,
素質,霊体,1,
素質,魔術師,1,
素質,君主の器,1,
素質,成長型,11,
素質,姓名逆転,1,
素質,Ｖ締まり,850,
素質,Ａ締まり,850,
素質,危険日,2,
素質,バストサイズ,1,
素質,ヒップサイズ,1,
素質,体型,1,
素質,職業,15,

CFLAG,口上カラーコード,0xFF99FF,

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリと対応
CSTR,100,髪飾り,;頭
CSTR,101,なし,;首
CSTR,102,なし,;上服
CSTR,103,なし,;下服
CSTR,104,マント,;上着
CSTR,105,麗姫のドレス,;上下服
CSTR,106,シースルーブラ,;下着上
CSTR,107,シースルーパンティ,;下着下
CSTR,108,なし,;上下下着
CSTR,109,なし,;腕
CSTR,110,網タイツ,;靴下
CSTR,111,麗姫の鎧靴,;靴
CSTR,112,なし,;アクセサリ

;[ポートレイトパーツ情報]
CSTR,120,CC1_後髪_3
;大人差し替え用メモ
;CSTR,120,CC1_後髪_5
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_0
CSTR,123,CC1_瞳_0
CSTR,124,CC1_目_5
CSTR,126,CC1_鼻_0
CSTR,127,CC1_口_3
CSTR,128,CC1_服_ドレス_2
CSTR,129,CC1_前髪_7
CSTR,130,CC1_眉_3
CSTR,132,CC1_帽子_ティアラ_2
CSTR,133,CC1_アクセサリ1_コサージュ_0
CSTR,138,CC1_首飾_首飾_4
;大人差し替え用メモ
;CSTR,133,CC1_アクセサリ1_コサージュ_2
;CSTR,138,CC1_首飾_首飾_7
CSTR,145,CC1_インナーヘア_2
CSTR,150,428:224:280
CSTR,151,白
CSTR,152,白
CSTR,153,388:112:452
CSTR,154,
CSTR,156,
CSTR,157,
CSTR,158,栗
CSTR,159,428:224:280
CSTR,160,428:224:280
CSTR,162,黄
CSTR,163,160:72:40
CSTR,168,96:108:132
CSTR,175,408:148:144
CSTR,180,[FACE_PARTS_OFFSET_Y:2][FACE_PARTS_SIZE_MOD_X:5]
CSTR,186,[FACE_PARTS_OFFSET_X:2]
CSTR,187,[FACE_PARTS_OFFSET_X:1][FACE_PARTS_OFFSET_Y:2]
CSTR,189,[FACE_PARTS_OFFSET_Y:5][FACE_PARTS_SIZE_MOD_Y:6]
CSTR,190,[FACE_PARTS_OFFSET_Y:5]
CSTR,192,[FACE_PARTS_OFFSET_X:-4][FACE_PARTS_OFFSET_Y:12][FACE_PARTS_SIZE_MOD_X:10]
CSTR,193,[FACE_PARTS_OFFSET_Y:2]
CSTR,205,[FACE_PARTS_OFFSET_Y:-5]


code:
番号,3,
名前,ソーニャ,
呼び名,ソーニャ,
CSTR,0,エムリウス
CSTR,1,ソーニャ
CSTR,3,ソーニャ
CSTR,4,ソーニャ
CSTR,5,エムリウス
CSTR,6,ソーニャ
CSTR,7,ソーニャ
CSTR,8,人間
CSTR,99,UC_ソーニャ

基礎,体力,1750
基礎,気力,1800
基礎,精神力,1800

;eraは小数を読み込めないためいずれも一の位を小数第一位として扱う
;174.5cmは1745、54.2kgは542とする
基礎,身長,1555;cm
基礎,体重,542;kg
基礎,バスト,980;cm
基礎,ウェスト,592;cm
基礎,ヒップ,896;cm

能力,身体,18
能力,器用,25
能力,知識,55
能力,観察,40
能力,社交,20
能力,歌唱,20
能力,料理,42
能力,話術,25
能力,戦闘,25
能力,魔術,60

能力,主導度Ｎ,0
能力,主導度Ｕ,0
能力,倒錯度,0
能力,野心,15
能力,性知識,1
能力,肝臓,0

素質,性別,1
素質,処女,1
素質,キス未経験,1
素質,アナル処女,1

素質,保守的,1
素質,恥じらい,1
素質,大人しい,1
素質,痛みに弱い,1
素質,自慰しやすい,1

素質,Ｂ敏感,1
素質,Ｃ敏感,1

素質,成長型,11
素質,性格,1
素質,髪色,0xD36B9F
素質,髪の長さ,5
素質,姓名逆転,1
CFLAG,口上カラーコード,0xD36B9F

素質,魔術師,1
素質,調合,1

素質,Ｖ締まり,850
素質,Ａ締まり,900
素質,陰毛現在値,0
素質,陰毛目標値,0
素質,腋毛現在値,0
素質,腋毛目標値,0
素質,バストサイズ,2
素質,ヒップサイズ,1
素質,体型,0
素質,体格,0
素質,美尻,1

素質,職業,7

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリ　と対応
CSTR,100,帽子,;頭
CSTR,101,ペンダント,;首
CSTR,102,なし,;上服
CSTR,103,なし,;下服
CSTR,104,ケープ,;上着
CSTR,105,ローブ,;上下服
CSTR,106,ブラ,;下着上
CSTR,107,パンティ,;下着下
CSTR,108,なし;上下下着
CSTR,109,なし,;腕
CSTR,110,ニーハイソックス,;靴下
CSTR,111,レザーブーツ,;靴
CSTR,112,魔導書,;アクセサリ

;[ポートレイトパーツ情報]CharaN_キャラ名.csvに貼り付けて使用
CSTR,120,CC1_後髪_5
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_1
CSTR,123,CC1_瞳_2
CSTR,124,CC1_目_2
CSTR,128,CC1_服_ケープ_1
CSTR,129,CC1_前髪_4
CSTR,132,CC1_帽子_三角帽子_0
CSTR,133,CC1_アクセサリ1_コサージュ_2
CSTR,150,212:108:160
CSTR,151,
CSTR,152,
CSTR,153,408:152:200
CSTR,154,
CSTR,158,
CSTR,159,212:108:160
CSTR,162,
CSTR,163,388:220:268


code:
番号,4,
名前,オリヴィア,
呼び名,オリヴィア,
CSTR,0,フェール
CSTR,1,オリヴィア
CSTR,3,オリヴィア
CSTR,4,オリヴィア
CSTR,5,フェール
CSTR,6,オリヴィア
CSTR,7,オリヴィア
CSTR,8,亜人
CSTR,99,UC_オリヴィア

基礎,体力,2000
基礎,気力,1200
基礎,精神力,1200

;eraは小数を読み込めないためいずれも一の位を小数第一位として扱う
;174.5cmは1745、54.2kgは542とする
基礎,身長,1600;cm
基礎,体重,510;kg
基礎,バスト,812;cm
基礎,ウェスト,590;cm
基礎,ヒップ,800;cm

能力,身体,15
能力,器用,25
能力,知識,35
能力,観察,45
能力,社交,65
能力,歌唱,20
能力,料理,5
能力,話術,45
能力,戦闘,15
能力,魔術,0

能力,主導度Ｎ,0
能力,主導度Ｕ,0
能力,倒錯度,0
能力,野心,15
能力,性知識,1
能力,肝臓,0

素質,性別,1
素質,処女,1
素質,キス未経験,1
素質,アナル処女,1

素質,自制心,1
素質,貞操観念,1
素質,舌使い,1
素質,中毒しやすい,1

素質,Ｖ敏感,1
素質,Ａ敏感,1
素質,Ｂ鈍感,1

素質,成長型,6
素質,性格,1
素質,髪色,0xFFEA91
素質,髪の長さ,2
素質,姓名逆転,1
CFLAG,口上カラーコード,0xFFEA91

素質,Ｖ締まり,850
素質,Ａ締まり,900
素質,陰毛現在値,0
素質,陰毛目標値,0
素質,腋毛現在値,0
素質,腋毛目標値,0
素質,バストサイズ,0
素質,ヒップサイズ,0
素質,体型,0
素質,体格,0
素質,動物耳,1
素質,しっぽ,1

素質,職業,38,; 変数JOB_NAME 参照

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリ　と対応
CSTR,100,リボン,;頭
CSTR,101,リボンタイ,;首
CSTR,102,なし,;上服
CSTR,103,なし,;下服
CSTR,104,ケープ,;上着
CSTR,105,ドレス,;上下服
CSTR,106,レースブラ,;下着上
CSTR,107,レースパンティ,;下着下
CSTR,108,なし;上下下着
CSTR,109,なし,;腕
CSTR,110,ストッキング,;靴下
CSTR,111,レザーブーツ,;靴
CSTR,112,眼鏡,;アクセサリ

;[ポートレイトパーツ情報]キャラ情報の[ポートレイト・口上編集]から出力可能
CSTR,120,CC1_後髪_3
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_0
CSTR,123,CC1_瞳_2
CSTR,124,CC1_目_2
CSTR,128,CC1_服_ロリータドレス_0
CSTR,129,CC1_前髪_1
CSTR,131,CC1_頭部位_ケモミミ_0
CSTR,133,CC1_アクセサリ1_リボン_4
CSTR,136,CC1_眼鏡_眼鏡_0
CSTR,144,CC1_背面_尻尾_1
CSTR,150,橙
CSTR,151,
CSTR,152,
CSTR,153,440:340:180
CSTR,154,
CSTR,158,0:25:90#100:0:0#0:100:10,
CSTR,159,橙
CSTR,161,416:236:144
CSTR,163,100:232:120
CSTR,166,460:80:110


code:
番号,7,
名前,エル,
呼び名,エル,
CSTR,0,シュテルン
CSTR,1,エル
CSTR,3,エル
CSTR,4,エル
CSTR,5,シュテルン
CSTR,6,エル
CSTR,7,エル
CSTR,8,人間
CSTR,99,エル

基礎,体力,1900
基礎,気力,1200
基礎,精神力,1800

能力,身体,10
能力,器用,30
能力,知識,55
能力,観察,70
能力,社交,20
能力,歌唱,20
能力,料理,35
能力,話術,40
能力,戦闘,20

能力,主導度Ｎ,0
能力,主導度Ｕ,0
能力,倒錯度,0
能力,野心,15
能力,性知識,2
能力,肝臓,0

素質,性別,1
素質,処女,1
素質,キス未経験,1
素質,アナル処女,1

素質,気丈,1
素質,プライド高い,1
素質,好奇心,1
素質,楽観的,1
素質,習得早い,1
素質,Ｃ敏感,1
素質,Ｍ敏感,1

素質,教導,1

素質,成長型,9
素質,性格,1
素質,髪色,0xE6E6E6
素質,髪の長さ,5
素質,姓名逆転,1

素質,Ｖ締まり,850
素質,Ａ締まり,900
素質,陰毛現在値,0
素質,陰毛目標値,0
素質,腋毛現在値,0
素質,腋毛目標値,0
素質,バストサイズ,-1
素質,ヒップサイズ,0
素質,体型,-1
素質,体格,0

素質,職業,10

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリ　と対応
CSTR,100,髪飾り,;頭
CSTR,101,リボン,;首
CSTR,102,ブラウス,;上服
CSTR,103,フレアスカート,;下服
CSTR,104,ベスト,;上着
CSTR,105,なし,;上下服
CSTR,106,レースブラ,;下着上
CSTR,107,レースパンティ,;下着下
CSTR,108,なし;上下下着
CSTR,109,なし,;腕
CSTR,110,サイハイソックス,;靴下
CSTR,111,パンプス,;靴
CSTR,112,なし,;アクセサリ


code:
;戦闘メッセージ出力用ダミー
番号,99
名前,ナレーター,
呼び名,ナレーター,
CSTR,99,ナレーター

CSTR,1,ナレーター
CSTR,3,ナレーター
CSTR,4,ナレーター
CSTR,6,ナレーター

CFLAG,口上カラーコード,0xC0C0C0,

基礎,体力,2000
基礎,気力,1500
基礎,精神力,2500

素質,性別,0
素質,成長型,0

素質,処女,
素質,アナル処女,
素質,童貞,
素質,キス未経験,

能力,性知識,5
能力,性技,2
能力,身体,30
能力,器用,30
能力,知識,30
能力,観察,20
能力,社交,30
能力,歌唱,20
能力,料理,20
能力,話術,30
能力,戦闘,30

素質,Ｖ締まり,500
素質,Ａ締まり,500
素質,陰毛現在値,5
素質,陰毛目標値,5
素質,髪色,0x000000
素質,髪の長さ,200


code:
番号,9,
名前,シルフィーユ,
呼び名,フィー,
CSTR,0,ハーベスト
CSTR,1,シルフィーユ
CSTR,3,シルフィーユ
CSTR,4,シルフィーユ
CSTR,5,ハーベスト
CSTR,6,シルフィーユ
CSTR,7,シルフィーユ
CSTR,8,人間
CSTR,99,UC_シルフィーユ

基礎,体力,2300
基礎,気力,1800
基礎,精神力,2600

;eraは小数を読み込めないためいずれも一の位を小数第一位として扱う
;174.5cmは1745、54.2kgは542とする
基礎,身長,1590;cm
基礎,体重,510;kg
基礎,バスト,860;cm
基礎,ウェスト,590;cm
基礎,ヒップ,865;cm

能力,身体,47
能力,器用,53
能力,知識,40
能力,観察,30
能力,社交,20
能力,歌唱,25
能力,料理,45
能力,話術,30
能力,戦闘,45
能力,魔術,0

能力,主導度Ｎ,100
能力,主導度Ｕ,0
能力,倒錯度,0
能力,野心,10
能力,性知識,1

素質,性別,1
素質,処女,1
素質,キス未経験,1
素質,アナル処女,1

素質,気丈,1
素質,素直,1
素質,自制心,1
素質,貞操観念,1
素質,回復早い,1
素質,献身的,1
素質,痛みに強い,1
素質,求心力,1

素質,Ｃ敏感,1
素質,Ｖ敏感,1
素質,Ｂ敏感,1
素質,美尻,1

素質,成長型,0
素質,性格,1
素質,髪色,0x6677FF
素質,髪の長さ,5
素質,姓名逆転,1
CFLAG,口上カラーコード,0x6677FF

CFLAG,好感度,100

素質,Ｖ締まり,900
素質,Ａ締まり,950
素質,陰毛現在値,1
素質,陰毛目標値,1
素質,腋毛現在値,1
素質,腋毛目標値,1
素質,バストサイズ,1
素質,ヒップサイズ,0
素質,体型,0
素質,体格,0

素質,職業,4,;冒険者

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリ　と対応
CSTR,100,リボン,;頭
CSTR,101,なし,;首
CSTR,102,ブラウス,;上服
CSTR,103,フレアスカート,;下服
CSTR,104,なし,;上着
CSTR,105,なし,;上下服
CSTR,106,レースブラ,;下着上
CSTR,107,レースパンティ,;下着下
CSTR,108,なし;上下下着
CSTR,109,グローブ,;腕
CSTR,110,ブーツソックス,;靴下
CSTR,111,ブーツ,;靴
CSTR,112,懐中時計,;アクセサリ

;[ポートレイトパーツ情報]CharaN_キャラ名.csvに貼り付けて使用
CSTR,120,CC1_後髪_9
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_1
CSTR,123,CC1_瞳_1
CSTR,124,CC1_目_1
CSTR,128,CC1_服_ブラウス_0
CSTR,129,CC1_前髪_4
CSTR,130,CC1_眉_0
CSTR,133,CC1_アクセサリ1_リボン_3
CSTR,150,青
CSTR,151,
CSTR,152,
CSTR,153,青
CSTR,154,
CSTR,158,
CSTR,159,青
CSTR,163,


code:
;[キャラ情報]CharaN_キャラ名.csvに貼り付けて使用
番号,25,
名前,リナ,
呼び名,リナ,
CSTR,姓,ベッカー,
CSTR,名,リナ,
CSTR,姓カナ,ベッカー,
CSTR,名カナ,リナ,
CSTR,愛称,リナ,
CSTR,識別名,UC_リナ,

基礎,体力,1500,
基礎,気力,1500,
基礎,精神力,1500,
基礎,身長,1245,
基礎,体重,229,
基礎,バスト,485,
基礎,ウェスト,464,
基礎,ヒップ,599,

能力,身体,15,
能力,器用,10,
能力,知識,10,
能力,社交,5,
能力,観察,20,
能力,歌唱,15,
能力,料理,10,
能力,話術,10,
能力,戦闘,5,

素質,性別,1,
素質,処女,1,
素質,アナル処女,1,
素質,素直,1,
素質,感情乏しい,1,
素質,好奇心,1,
素質,楽観的,1,
素質,貞操無頓着,1,
素質,快感に素直,1,
素質,中毒しやすい,1,
素質,Ｃ敏感,1,
素質,Ｍ敏感,1,
素質,幼稚,1,
素質,動物耳,1,
素質,しっぽ,1,

素質,成長型,10,
素質,姓名逆転,1,
素質,Ｖ締まり,950,
素質,Ａ締まり,950,
素質,危険日,4,
素質,バストサイズ,-1,
素質,ヒップサイズ,-1,
素質,体格,-2,
素質,体型,-1,
素質,元性別,11,
素質,職業,12,

経験,おもらし経験,2,

CFLAG,口上カラーコード,0xFFFF99,

;初期設定の衣装情報。衣装部位_頭～衣装部位_アクセサリと対応
CSTR,100,ホワイトブリム,;頭
CSTR,101,なし,;首
CSTR,102,なし,;上服
CSTR,103,なし,;下服
CSTR,104,エプロン,;上着
CSTR,105,メイド服,;上下服
CSTR,106,スポーツブラ,;下着上
CSTR,107,ローライズ,;下着下
CSTR,108,なし,;上下下着
CSTR,109,シュシュ,;腕
CSTR,110,靴下,;靴下
CSTR,111,ローファー,;靴
CSTR,112,なし,;アクセサリ

;[ポートレイトパーツ情報]
CSTR,120,CC1_後髪_7
CSTR,121,CC1_身体_0
CSTR,122,CC1_顔_1
CSTR,123,CC1_瞳_0
CSTR,124,CC1_目_12
CSTR,126,CC1_鼻_0
CSTR,127,CC1_口_0
CSTR,128,CC1_服_ロリータドレス_0
CSTR,129,CC1_前髪_16
CSTR,130,CC1_眉_0
CSTR,131,CC1_頭部位_ケモミミ_1
CSTR,132,CC1_帽子_ヘッドドレス_0
CSTR,133,CC1_アクセサリ1_リボン_3
CSTR,144,CC1_背面_尻尾_2
CSTR,150,328:256:240
CSTR,151,
CSTR,152,
CSTR,153,黄
CSTR,154,
CSTR,156,
CSTR,157,
CSTR,158,白
CSTR,159,328:256:240
CSTR,160,
CSTR,161,328:256:240
CSTR,162,
CSTR,163,
CSTR,174,328:256:240
CSTR,180,[FACE_PARTS_OFFSET_X:5][FACE_PARTS_OFFSET_Y:15][FACE_PARTS_SIZE_MOD_X:-5][FACE_PARTS_SIZE_MOD_Y:-5]
CSTR,181,[FACE_PARTS_OFFSET_X:5][FACE_PARTS_OFFSET_Y:15][FACE_PARTS_SIZE_MOD_X:-5][FACE_PARTS_SIZE_MOD_Y:-5]
CSTR,182,[FACE_PARTS_OFFSET_X:5][FACE_PARTS_OFFSET_Y:15][FACE_PARTS_SIZE_MOD_X:-5][FACE_PARTS_SIZE_MOD_Y:-5]
CSTR,183,[FACE_PARTS_OFFSET_X:2][FACE_PARTS_OFFSET_Y:18][FACE_PARTS_SIZE_MOD_X:1][FACE_PARTS_SIZE_MOD_Y:1]
CSTR,184,[FACE_PARTS_OFFSET_X:2][FACE_PARTS_OFFSET_Y:18][FACE_PARTS_SIZE_MOD_X:1][FACE_PARTS_SIZE_MOD_Y:1]
CSTR,186,[FACE_PARTS_OFFSET_X:9][FACE_PARTS_OFFSET_Y:25][FACE_PARTS_SIZE_MOD_X:-5][FACE_PARTS_SIZE_MOD_Y:-5]
CSTR,187,[FACE_PARTS_OFFSET_X:2][FACE_PARTS_OFFSET_Y:21][FACE_PARTS_SIZE_MOD_X:-5][FACE_PARTS_SIZE_MOD_Y:-5]
CSTR,188,[FACE_PARTS_OFFSET_X:5][FACE_PARTS_OFFSET_Y:15][FACE_PARTS_SIZE_MOD_X:-5][FACE_PARTS_SIZE_MOD_Y:-5]
CSTR,189,[FACE_PARTS_OFFSET_Y:17]
CSTR,190,[FACE_PARTS_OFFSET_X:5][FACE_PARTS_OFFSET_Y:12][FACE_PARTS_SIZE_MOD_X:-5][FACE_PARTS_SIZE_MOD_Y:-5]
CSTR,191,[FACE_PARTS_OFFSET_Y:11]
CSTR,192,[FACE_PARTS_OFFSET_X:5][FACE_PARTS_OFFSET_Y:20][FACE_PARTS_SIZE_MOD_X:-5][FACE_PARTS_SIZE_MOD_Y:-5]
CSTR,193,[FACE_PARTS_OFFSET_X:5][FACE_PARTS_OFFSET_Y:15][FACE_PARTS_SIZE_MOD_X:-5][FACE_PARTS_SIZE_MOD_Y:-5]
CSTR,204,[FACE_PARTS_OFFSET_X:5][FACE_PARTS_OFFSET_Y:5][FACE_PARTS_SIZE_MOD_X:-5][FACE_PARTS_SIZE_MOD_Y:-5]