; Merged Mod: .\hat_red_bikini\Charlotte.ini, .\hat_white_bikini\Charlotte.ini, .\no_hat_red_bikini\charlotte.ini, .\no_hat_white_bikini\charlotte.ini

; Constants ---------------------------

[Constants]
global persist $swapvar = 0
global $ActiveCharacter = 0

[KeySwap]
condition = $ActiveCharacter == 1
key = ]
back = [
type = cycle
$swapvar = 0,1,2,3

[Present]
post $ActiveCharacter = 0

; Overrides ---------------------------

[TextureOverrideCharlottePosition]
hash = c5a6d98e
run = CommandListCharlottePosition
$ActiveCharacter = 1

[TextureOverrideCharlotteBlend]
hash = c195ab20
run = CommandListCharlotteBlend

[TextureOverrideCharlotteTexcoord]
hash = 54841c9b
run = CommandListCharlotteTexcoord

[TextureOverrideCharlotteVertexLimitRaise]
hash = 48fae4f9

[TextureOverrideCharlotteIB]
hash = c7812015
run = CommandListCharlotteIB

[TextureOverrideCharlotteHead]
hash = c7812015
match_first_index = 0
run = CommandListCharlotteHead

[TextureOverrideCharlotteBody]
hash = c7812015
match_first_index = 23271
run = CommandListCharlotteBody

[TextureOverrideCharlotteFaceHeadNormalMap]
hash = 58d9859b
run = CommandListCharlotteFaceHeadNormalMap

; CommandList -------------------------

[CommandListCharlottePosition]
if $swapvar == 0
	vb0 = ResourceCharlottePosition.0
else if $swapvar == 1
	vb0 = ResourceCharlottePosition.1
else if $swapvar == 2
	vb0 = ResourcecharlottePosition.2
else if $swapvar == 3
	vb0 = ResourcecharlottePosition.3
endif

[CommandListCharlotteBlend]
if $swapvar == 0
	vb1 = ResourceCharlotteBlend.0
	handling = skip
	draw = 50320,0
else if $swapvar == 1
	vb1 = ResourceCharlotteBlend.1
	handling = skip
	draw = 50320,0
else if $swapvar == 2
	vb1 = ResourcecharlotteBlend.2
	handling = skip
	draw = 48751,0
else if $swapvar == 3
	vb1 = ResourcecharlotteBlend.3
	handling = skip
	draw = 48751,0
endif

[CommandListCharlotteTexcoord]
if $swapvar == 0
	vb1 = ResourceCharlotteTexcoord.0
else if $swapvar == 1
	vb1 = ResourceCharlotteTexcoord.1
else if $swapvar == 2
	vb1 = ResourcecharlotteTexcoord.2
else if $swapvar == 3
	vb1 = ResourcecharlotteTexcoord.3
endif

[CommandListCharlotteIB]
if $swapvar == 0
	handling = skip
	drawindexed = auto
else if $swapvar == 1
	handling = skip
	drawindexed = auto
else if $swapvar == 2
	handling = skip
	drawindexed = auto
else if $swapvar == 3
	handling = skip
	drawindexed = auto
endif

[CommandListCharlotteHead]
if $swapvar == 0
	ib = ResourceCharlotteHeadIB.0
	ps-t0 = ResourceCharlotteHeadNormalMap.0
	ps-t1 = ResourceCharlotteHeadDiffuse.0
	ps-t2 = ResourceCharlotteHeadLightMap.0
	$CharacterIB = 1
	ResourceRefHeadDiffuse = reference ps-t1
	ResourceRefHeadLightMap = reference ps-t2
else if $swapvar == 1
	ib = ResourceCharlotteHeadIB.1
	ps-t0 = ResourceCharlotteHeadNormalMap.1
	ps-t1 = ResourceCharlotteHeadDiffuse.1
	ps-t2 = ResourceCharlotteHeadLightMap.1
	$CharacterIB = 1
	ResourceRefHeadDiffuse = reference ps-t1
	ResourceRefHeadLightMap = reference ps-t2
else if $swapvar == 2
	ib = ResourcecharlotteHeadIB.2
	ps-t0 = ResourcecharlotteHeadNormalMap.2
	ps-t1 = ResourcecharlotteHeadDiffuse.2
	ps-t2 = ResourcecharlotteHeadLightMap.2
	$CharacterIB = 1
	ResourceRefHeadDiffuse = reference ps-t1
	ResourceRefHeadLightMap = reference ps-t2
else if $swapvar == 3
	ib = ResourcecharlotteHeadIB.3
	ps-t0 = ResourcecharlotteHeadNormalMap.3
	ps-t1 = ResourcecharlotteHeadDiffuse.3
	ps-t2 = ResourcecharlotteHeadLightMap.3
	$CharacterIB = 1
	ResourceRefHeadDiffuse = reference ps-t1
	ResourceRefHeadLightMap = reference ps-t2
endif

[CommandListCharlotteBody]
if $swapvar == 0
	ib = ResourceCharlotteBodyIB.0
	ps-t0 = ResourceCharlotteBodyNormalMap.0
	ps-t1 = ResourceCharlotteBodyDiffuse.0
	ps-t2 = ResourceCharlotteBodyLightMap.0
	$CharacterIB = 2
	ResourceRefBodyDiffuse = reference ps-t1
	ResourceRefBodyLightMap = reference ps-t2
else if $swapvar == 1
	ib = ResourceCharlotteBodyIB.1
	ps-t0 = ResourceCharlotteBodyNormalMap.1
	ps-t1 = ResourceCharlotteBodyDiffuse.1
	ps-t2 = ResourceCharlotteBodyLightMap.1
	$CharacterIB = 2
	ResourceRefBodyDiffuse = reference ps-t1
	ResourceRefBodyLightMap = reference ps-t2
else if $swapvar == 2
	ib = ResourcecharlotteBodyIB.2
	ps-t0 = ResourcecharlotteBodyNormalMap.2
	ps-t1 = ResourcecharlotteBodyDiffuse.2
	ps-t2 = ResourcecharlotteBodyLightMap.2
	$CharacterIB = 2
	ResourceRefBodyDiffuse = reference ps-t1
	ResourceRefBodyLightMap = reference ps-t2
else if $swapvar == 3
	ib = ResourcecharlotteBodyIB.3
	ps-t0 = ResourcecharlotteBodyNormalMap.3
	ps-t1 = ResourcecharlotteBodyDiffuse.3
	ps-t2 = ResourcecharlotteBodyLightMap.3
	$CharacterIB = 2
	ResourceRefBodyDiffuse = reference ps-t1
	ResourceRefBodyLightMap = reference ps-t2
endif

[CommandListCharlotteFaceHeadNormalMap]
if $swapvar == 0
	ps-t0 = ResourceCharlotteFaceHeadNormalMap.0
else if $swapvar == 1
	ps-t0 = ResourceCharlotteFaceHeadNormalMap.1
else if $swapvar == 2
	ps-t0 = ResourcecharlotteFaceHeadNormalMap.2
else if $swapvar == 3
	ps-t0 = ResourcecharlotteFaceHeadNormalMap.3
endif

; Resources ---------------------------

[ResourceCharlottePosition.0]
type = Buffer
stride = 40
filename = .\hat_red_bikini\CharlottePosition.buf

[ResourceCharlotteBlend.0]
type = Buffer
stride = 32
filename = .\hat_red_bikini\CharlotteBlend.buf

[ResourceCharlotteTexcoord.0]
type = Buffer
stride = 12
filename = .\hat_red_bikini\CharlotteTexcoord.buf

[ResourceCharlotteHeadIB.0]
type = Buffer
format = DXGI_FORMAT_R32_UINT
filename = .\hat_red_bikini\CharlotteHead.ib

[ResourceCharlotteBodyIB.0]
type = Buffer
format = DXGI_FORMAT_R32_UINT
filename = .\hat_red_bikini\CharlotteBody.ib

[ResourceCharlotteHeadNormalMap.0]
filename = .\hat_red_bikini\CharlotteHeadNormalMap.dds

[ResourceCharlotteHeadDiffuse.0]
filename = .\hat_red_bikini\CharlotteHeadDiffuse.dds

[ResourceCharlotteHeadLightMap.0]
filename = .\hat_red_bikini\CharlotteHeadLightMap.dds

[ResourceCharlotteBodyNormalMap.0]
filename = .\hat_red_bikini\CharlotteBodyNormalMap.dds

[ResourceCharlotteBodyDiffuse.0]
filename = .\hat_red_bikini\CharlotteBodyDiffuse.dds

[ResourceCharlotteBodyLightMap.0]
filename = .\hat_red_bikini\CharlotteBodyLightMap.dds

[ResourceCharlotteFaceHeadNormalMap.0]
filename = .\hat_red_bikini\CharlotteFaceHeadNormalMap.dds

[ResourceCharlottePosition.1]
type = Buffer
stride = 40
filename = .\hat_red_bikini\CharlottePosition.buf

[ResourceCharlotteBlend.1]
type = Buffer
stride = 32
filename = .\hat_red_bikini\CharlotteBlend.buf

[ResourceCharlotteTexcoord.1]
type = Buffer
stride = 12
filename = .\hat_red_bikini\CharlotteTexcoord.buf

[ResourceCharlotteHeadIB.1]
type = Buffer
format = DXGI_FORMAT_R32_UINT
filename = .\hat_red_bikini\CharlotteHead.ib

[ResourceCharlotteBodyIB.1]
type = Buffer
format = DXGI_FORMAT_R32_UINT
filename = .\hat_red_bikini\CharlotteBody.ib

[ResourceCharlotteHeadNormalMap.1]
filename = .\hat_red_bikini\CharlotteHeadNormalMap.dds

[ResourceCharlotteHeadDiffuse.1]
filename = .\hat_red_bikini\CharlotteHeadDiffuse.dds

[ResourceCharlotteHeadLightMap.1]
filename = .\hat_red_bikini\CharlotteHeadLightMap.dds

[ResourceCharlotteBodyNormalMap.1]
filename = .\hat_red_bikini\CharlotteBodyNormalMap.dds

[ResourceCharlotteBodyDiffuse.1]
filename = .\hat_white_bikini\CharlotteBodyDiffuse.dds

[ResourceCharlotteBodyLightMap.1]
filename = .\hat_red_bikini\CharlotteBodyLightMap.dds

[ResourceCharlotteFaceHeadNormalMap.1]
filename = .\hat_red_bikini\CharlotteFaceHeadNormalMap.dds

[ResourcecharlottePosition.2]
type = Buffer
stride = 40
filename = .\no_hat_red_bikini\charlottePosition.buf

[ResourcecharlotteBlend.2]
type = Buffer
stride = 32
filename = .\no_hat_red_bikini\charlotteBlend.buf

[ResourcecharlotteTexcoord.2]
type = Buffer
stride = 12
filename = .\no_hat_red_bikini\charlotteTexcoord.buf

[ResourcecharlotteHeadIB.2]
type = Buffer
format = DXGI_FORMAT_R32_UINT
filename = .\no_hat_red_bikini\charlotteHead.ib

[ResourcecharlotteBodyIB.2]
type = Buffer
format = DXGI_FORMAT_R32_UINT
filename = .\no_hat_red_bikini\charlotteBody.ib

[ResourcecharlotteHeadNormalMap.2]
filename = .\hat_red_bikini\CharlotteHeadNormalMap.dds

[ResourcecharlotteHeadDiffuse.2]
filename = .\no_hat_red_bikini\charlotteHeadDiffuse.dds

[ResourcecharlotteHeadLightMap.2]
filename = .\hat_red_bikini\CharlotteHeadLightMap.dds

[ResourcecharlotteBodyNormalMap.2]
filename = .\hat_red_bikini\CharlotteBodyNormalMap.dds

[ResourcecharlotteBodyDiffuse.2]
filename = .\hat_red_bikini\CharlotteBodyDiffuse.dds

[ResourcecharlotteBodyLightMap.2]
filename = .\hat_red_bikini\CharlotteBodyLightMap.dds

[ResourcecharlotteFaceHeadNormalMap.2]
filename = .\hat_red_bikini\CharlotteFaceHeadNormalMap.dds

[ResourcecharlottePosition.3]
type = Buffer
stride = 40
filename = .\no_hat_red_bikini\charlottePosition.buf

[ResourcecharlotteBlend.3]
type = Buffer
stride = 32
filename = .\no_hat_red_bikini\charlotteBlend.buf

[ResourcecharlotteTexcoord.3]
type = Buffer
stride = 12
filename = .\no_hat_red_bikini\charlotteTexcoord.buf

[ResourcecharlotteHeadIB.3]
type = Buffer
format = DXGI_FORMAT_R32_UINT
filename = .\no_hat_red_bikini\charlotteHead.ib

[ResourcecharlotteBodyIB.3]
type = Buffer
format = DXGI_FORMAT_R32_UINT
filename = .\no_hat_red_bikini\charlotteBody.ib

[ResourcecharlotteHeadNormalMap.3]
filename = .\hat_red_bikini\CharlotteHeadNormalMap.dds

[ResourcecharlotteHeadDiffuse.3]
filename = .\no_hat_red_bikini\charlotteHeadDiffuse.dds

[ResourcecharlotteHeadLightMap.3]
filename = .\hat_red_bikini\CharlotteHeadLightMap.dds

[ResourcecharlotteBodyNormalMap.3]
filename = .\hat_red_bikini\CharlotteBodyNormalMap.dds

[ResourcecharlotteBodyDiffuse.3]
filename = .\hat_white_bikini\CharlotteBodyDiffuse.dds

[ResourcecharlotteBodyLightMap.3]
filename = .\hat_red_bikini\CharlotteBodyLightMap.dds

[ResourcecharlotteFaceHeadNormalMap.3]
filename = .\hat_red_bikini\CharlotteFaceHeadNormalMap.dds



; .ini generated by GIMI (Genshin-Impact-Model-Importer) mod merger script
; If you have any issues or find any bugs, please open a ticket at https://github.com/SilentNightSound/GI-Model-Importer/issues or contact SilentNightSound#7430 on discord

; Variables -----------------------

[Constants]
global $CharacterIB
;0=none, 1=head, 2=body, 3=dress, 4=extra, etc.

[Present]
post $CharacterIB = 0

[ResourceRefHeadDiffuse]
[ResourceRefHeadLightMap]
[ResourceRefBodyDiffuse]
[ResourceRefBodyLightMap]
[ResourceRefDressDiffuse]
[ResourceRefDressLightMap]
[ResourceRefExtraDiffuse]
[ResourceRefExtraLightMap]

; ShaderOverride ---------------------------

[ShaderRegexCharReflection]
shader_model = ps_5_0
run = CommandListReflectionTexture
[ShaderRegexCharReflection.pattern]
mul r\d+\.\w+, r\d+\.\w+,[^.]*\.\w+\n
mad o\d+\.\w+, r\d+\.\w+, cb\d+\[\d+\]\.\w+, r\d+\.\w+\n
mov o\d+\.\w+, l\(\d+\.\d+\)\n

; OPTIONAL: If regex match breaks, use a [ShaderOverride] command matching shader hash for reflection then use "run = CommandListOutline" under the command

; CommandList -------------------------

[CommandListReflectionTexture]
if $CharacterIB != 0
    if $CharacterIB == 1
        ps-t0 = copy ResourceRefHeadDiffuse
    else if $CharacterIB == 2
        ps-t0 = copy ResourceRefBodyDiffuse
    else if $CharacterIB == 3
        ps-t0 = copy ResourceRefDressDiffuse
    else if $CharacterIB == 4
        ps-t0 = copy ResourceRefExtraDiffuse    
    endif
drawindexed=auto
$CharacterIB = 0
endif

[CommandListOutline]
if $CharacterIB != 0
    if $CharacterIB == 1
        ps-t1 = copy ResourceRefHeadLightMap
    else if $CharacterIB == 2
        ps-t1 = copy ResourceRefBodyLightMap
    else if $CharacterIB == 3
        ps-t1 = copy ResourceRefDressLightMap
    else if $CharacterIB == 4
        ps-t1 = copy ResourceRefExtraLightMap
    endif
drawindexed=auto
$CharacterIB = 0
endif
