Page 12 of 65

Posted: Sat Feb 02, 2013 20:38
by 1244
In which way I can add new machine to function check_LV_node_subp in battery box? I ask because I create new mod wich use energy from LV battery box.

Posted: Sat Feb 02, 2013 21:04
by RealBadAngel
1244 wrote:In which way I can add new machine to function check_LV_node_subp in battery box? I ask because I create new mod wich use energy from LV battery box.
by now only manually by adding there your power receiver (or producer)
i need to make an API call to register new machines easily

Posted: Sun Feb 03, 2013 01:22
by RealBadAngel
- added fully functional MV furnace

Image

put RE batteries into upgrade slots to increase internal energy buffer
or put there Control Logic Unit for furnace send cooked items into tubes
Furnace can accept tubes input from any side (but left is recommended)
Output is only to the right.

crafting recipes:

output = 'technic:mv_electric_furnace',
recipe = {
{'technic:stainless_steel_ingot', 'technic:electric_furnace', 'technic:stainless_steel_ingot'},
{'pipeworks:tube_000000', 'technic:mv_transformer', 'pipeworks:tube_000000'},
{'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
}

end:
output = 'technic:control_logic_unit',
recipe = {
{'', 'moreores:gold_ingot', ''},
{'moreores:copper_ingot', 'technic:silicon_wafer', 'moreores:copper_ingot'},
{'', 'moreores:copper_ingot', ''},
}

Posted: Sun Feb 03, 2013 09:02
by Nore
I tried to use the MV furnace, but it looks like it doesn't receive power from the MV cables, battery boxes and solar panels. Am I doing something wrong?

EDIT: found where the bug comes from: you should add the following at line 320 of battery_box_mv.lua:

Code: Select all

if minetest.env:get_node(pos1).name == "technic:mv_electric_furnace" then     new_node_added=add_new_cable_node(RE_nodes,pos1) end        
if minetest.env:get_node(pos1).name == "technic:mv_electric_furnace_active" then     new_node_added=add_new_cable_node(RE_nodes,pos1) end        
It could be even better if you used something in the node definition, so one could easily define new machines and power producers, and the code would be more simpler.

Posted: Sun Feb 03, 2013 09:26
by RealBadAngel
Nore wrote:I tried to use the MV furnace, but it looks like it doesn't receive power from the MV cables, battery boxes and solar panels. Am I doing something wrong?

EDIT: found where the bug comes from: you should add the following at line 320 of battery_box_mv.lua:

Code: Select all

if minetest.env:get_node(pos1).name == "technic:mv_electric_furnace" then     new_node_added=add_new_cable_node(RE_nodes,pos1) end        
if minetest.env:get_node(pos1).name == "technic:mv_electric_furnace_active" then     new_node_added=add_new_cable_node(RE_nodes,pos1) end        
It could be even better if you used something in the node definition, so one could easily define new machines and power producers, and the code would be more simpler.
hehe, forgot to update this file :) ofc youre right, i will make register function

Posted: Sun Feb 03, 2013 09:28
by Nore
About the HV tier, you could perhaps make them compatible with filters... It could be useful for taking out items at a high rate.

Posted: Sun Feb 03, 2013 10:35
by Nore
Suggestion for tube crafting recipes:

Code: Select all

minetest.register_craft({
    output = 'pipeworks:accelerator_tube_000000',
    recipe = {
        {'technic:copper_coil', 'pipeworks:tube_000000', 'technic:copper_coil'},
        }
})

minetest.register_craft({
    output = 'pipeworks:detector_tube_off_000000',
    recipe = {
        {'mesecons:mesecon', 'pipeworks:tube_000000', 'mesecons:mesecon'},
        }
})

minetest.register_craft({
    output = 'pipeworks:sand_tube_000000',
    recipe = {
        {'default:sand', 'pipeworks:tube_000000', 'default:sand'},
        }
})

minetest.register_craft({
    output = 'pipeworks:teleport_tube_000000',
    recipe = {
        {'default:mese_crystal', 'default:desert_stone', 'default:mese_crystal'},
        {'default:desert_stone', 'pipeworks:tube_000000', 'default:desert_stone'},
        {'default:mese_crystal', 'default:desert_stone', 'default:mese_crystal'},
        }
})

Posted: Sun Feb 03, 2013 12:27
by RealBadAngel
Nore wrote:Suggestion for tube crafting recipes:

Code: Select all

minetest.register_craft({
    output = 'pipeworks:accelerator_tube_000000',
    recipe = {
        {'technic:copper_coil', 'pipeworks:tube_000000', 'technic:copper_coil'},
        }
})

minetest.register_craft({
    output = 'pipeworks:detector_tube_off_000000',
    recipe = {
        {'mesecons:mesecon', 'pipeworks:tube_000000', 'mesecons:mesecon'},
        }
})

minetest.register_craft({
    output = 'pipeworks:sand_tube_000000',
    recipe = {
        {'default:sand', 'pipeworks:tube_000000', 'default:sand'},
        }
})

minetest.register_craft({
    output = 'pipeworks:teleport_tube_000000',
    recipe = {
        {'default:mese_crystal', 'default:desert_stone', 'default:mese_crystal'},
        {'default:desert_stone', 'pipeworks:tube_000000', 'default:desert_stone'},
        {'default:mese_crystal', 'default:desert_stone', 'default:mese_crystal'},
        }
})
Recipes added, with some changes to teleport tube.

Also added Injector.
crafting recipe:
output = 'technic:injector 1',
recipe = {
{'', 'technic:control_logic_unit',''},
{'', 'default:chest',''},
{'', 'pipeworks:tube_000000',''},
}
output: bottom, input from all sides
Use it like a chest, it will put everything stored here into the tubes

Injector is on the left side:
Image

Another setup of injector and furnace, quite nice:
Image

Posted: Sun Feb 03, 2013 17:01
by RealBadAngel
Added MV Alloy Furnace

Posted: Sun Feb 03, 2013 17:37
by VanessaE
I like that crafting recipe for the accelerator tube - reminds me of a coilgun :-)

Posted: Sun Feb 03, 2013 18:47
by RealBadAngel
1244 wrote:In which way I can add new machine to function check_LV_node_subp in battery box? I ask because I create new mod wich use energy from LV battery box.
Implemented.

To register new power machine please use:

register_LV_machine (node_name,machine_type)
or
register_MV_machine (node_name,machine_type)

where node_name is name of registered machine
machine_type can be "PR" when machine produces energy, "RE" when machine is energy receiver

also metadata of registered machine shall have 3 additional variables defined

for LV machines:
technic_power_machine=1,
internal_EU_buffer=0;
internal_EU_buffer_size=value;

for MV machines
technic_mv_power_machine=1,
internal_EU_buffer=0;
internal_EU_buffer_size=value;

technic_power_machine=1 or technic_MV_power_machine=1 is used by wireing check routines

Posted: Tue Feb 05, 2013 18:00
by 1244
When I used technic 0.94 I have bug in unified inventory:
18:57:40: VERBOSE[main]: error_message = ServerError: LuaError: error: ...n\..\mods\minetest\technic\unified_inventory/api.lua:465: bad argument #1 to 'lower' (string expected, got table)

Posted: Tue Feb 05, 2013 18:15
by Nore
Try to upgrade to latest stairplus.

Also, I have a more or less working frame code:

Code: Select all

function get_face(pos,ppos,pvect)
    ppos={x=ppos.x-pos.x,y=ppos.y-pos.y+1.5,z=ppos.z-pos.z}
    if pvect.x>0 then
        local t=(-0.5-ppos.x)/pvect.x
        local y_int=ppos.y+t*pvect.y
        local z_int=ppos.z+t*pvect.z
        if y_int>-0.4 and y_int<0.4 and z_int>-0.4 and z_int<0.4 then return 1 end 
    elseif pvect.x<0 then
        local t=(0.5-ppos.x)/pvect.x
        local y_int=ppos.y+t*pvect.y
        local z_int=ppos.z+t*pvect.z
        if y_int>-0.4 and y_int<0.4 and z_int>-0.4 and z_int<0.4 then return 2 end 
    end
    if pvect.y>0 then
        local t=(-0.5-ppos.y)/pvect.y
        local x_int=ppos.x+t*pvect.x
        local z_int=ppos.z+t*pvect.z
        if x_int>-0.4 and x_int<0.4 and z_int>-0.4 and z_int<0.4 then return 3 end 
    elseif pvect.y<0 then
        local t=(0.5-ppos.y)/pvect.y
        local x_int=ppos.x+t*pvect.x
        local z_int=ppos.z+t*pvect.z
        if x_int>-0.4 and x_int<0.4 and z_int>-0.4 and z_int<0.4 then return 4 end 
    end
    if pvect.z>0 then
        local t=(-0.5-ppos.z)/pvect.z
        local x_int=ppos.x+t*pvect.x
        local y_int=ppos.y+t*pvect.y
        if x_int>-0.4 and x_int<0.4 and y_int>-0.4 and y_int<0.4 then return 5 end 
    elseif pvect.z<0 then
        local t=(0.5-ppos.z)/pvect.z
        local x_int=ppos.x+t*pvect.x
        local y_int=ppos.y+t*pvect.y
        if x_int>-0.4 and x_int<0.4 and y_int>-0.4 and y_int<0.4 then return 6 end 
    end
end


for xm=0,1 do
for xp=0,1 do
for ym=0,1 do
for yp=0,1 do
for zm=0,1 do
for zp=0,1 do

    local outimgs = {}

    if yp==1 then
        table.insert(outimgs, "technic_lv_cable.png")
    else
        table.insert(outimgs, "default_stone.png")
    end
    if ym==1 then
        table.insert(outimgs, "technic_lv_cable.png")
    else
        table.insert(outimgs, "default_stone.png")
    end
    if xp==1 then
        table.insert(outimgs, "technic_lv_cable.png")
    else
        table.insert(outimgs, "default_stone.png")
    end
    if xm==1 then
        table.insert(outimgs, "technic_lv_cable.png")
    else
        table.insert(outimgs, "default_stone.png")
    end
    if zp==1 then
        table.insert(outimgs, "technic_lv_cable.png")
    else
        table.insert(outimgs, "default_stone.png")
    end
    if zm==1 then
        table.insert(outimgs, "technic_lv_cable.png")
    else
        table.insert(outimgs, "default_stone.png")
    end
    
    local nameext=tostring(xm)..tostring(xp)..tostring(ym)..tostring(yp)..tostring(zm)..tostring(zp)
    local groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}
    if nameext~="111111" then groups.not_in_creative_inventory=1 end
    

    minetest.register_node("technic:frame_"..nameext,{
        description = "Frame",
        tiles = outimgs,
        groups=groups,
        frame=1,
        drop="technic:frame_111111",
        frame_connect_all=function(pos)
            local nodename=minetest.env:get_node(pos).name
            l2={}
            l1={{x=-1,y=0,z=0},{x=1,y=0,z=0},{x=0,y=-1,z=0},{x=0,y=1,z=0},{x=0,y=0,z=-1},{x=0,y=0,z=1}}
            for i,dir in ipairs(l1) do
                if string.sub(nodename,-7+i,-7+i)=="1" then
                    l2[#(l2)+1]=dir
                end
            end
            return l2
        end,
        on_punch=function(pos,node,puncher)
            local ppos=puncher:getpos()
            local pvect=puncher:get_look_dir()
            local pface=get_face(pos,ppos,pvect)
            if pface==nil then return end
            local nodename=node.name
            local newstate=tostring(1-tonumber(string.sub(nodename,-7+pface,-7+pface)))
            if pface<=5 then
                nodename=string.sub(nodename,1,-7+pface-1)..newstate..string.sub(nodename,-7+pface+1)
            else
                nodename=string.sub(nodename,1,-2)..newstate
            end
            node.name=nodename
            minetest.env:set_node(pos,node)
        end
    })

end
end
end
end
end
end


function frame_motor1_on(pos,node)
    local npos={x=pos.x,y=pos.y+1,z=pos.z}
    local nnode=minetest.env:get_node(npos)
    if node.param2==0 then
        dir={x=1,y=0,z=0}
    elseif node.param2==1 then
        dir={x=0,y=0,z=-1}
    elseif node.param2==2 then
        dir={x=-1,y=0,z=0}
    else
        dir={x=0,y=0,z=1}
    end
    if minetest.registered_nodes[nnode.name].frame==1 then
        local connected_nodes=get_connected_nodes(npos)
        move_nodes_vect(connected_nodes,dir)
    end
end

function frame_motor2_on(pos,node)
    local npos={x=pos.x,y=pos.y-1,z=pos.z}
    local nnode=minetest.env:get_node(npos)
    if node.param2==0 then
        dir={x=1,y=0,z=0}
    elseif node.param2==1 then
        dir={x=0,y=0,z=-1}
    elseif node.param2==2 then
        dir={x=-1,y=0,z=0}
    else
        dir={x=0,y=0,z=1}
    end
    if minetest.registered_nodes[nnode.name].frame==1 then
        local connected_nodes=get_connected_nodes(npos)
        move_nodes_vect(connected_nodes,dir)
    end
end

function frame_motor3_on(pos,node)
    local npos={x=pos.x,y=pos.y,z=pos.z}
    if node.param2==0 then
        dir={x=1,y=0,z=0}
        npos.z=npos.z-1
    elseif node.param2==1 then
        dir={x=0,y=0,z=-1}
        npos.x=npos.x-1
    elseif node.param2==2 then
        dir={x=-1,y=0,z=0}
        npos.z=npos.z+1
    else
        dir={x=0,y=0,z=1}
        npos.x=npos.x+1
    end
    local nnode=minetest.env:get_node(npos)
    if minetest.registered_nodes[nnode.name].frame==1 then
        local connected_nodes=get_connected_nodes(npos)
        move_nodes_vect(connected_nodes,dir)
    end
end

function frame_motor4_on(pos,node)
    local npos={x=pos.x,y=pos.y,z=pos.z}
    if node.param2==0 then
        dir={x=-1,y=0,z=0}
        npos.z=npos.z-1
    elseif node.param2==1 then
        dir={x=0,y=0,z=1}
        npos.x=npos.x-1
    elseif node.param2==2 then
        dir={x=1,y=0,z=0}
        npos.z=npos.z+1
    else
        dir={x=0,y=0,z=-1}
        npos.x=npos.x+1
    end
    local nnode=minetest.env:get_node(npos)
    if minetest.registered_nodes[nnode.name].frame==1 then
        local connected_nodes=get_connected_nodes(npos)
        move_nodes_vect(connected_nodes,dir)
    end
end

function frame_motor5_on(pos,node)
    local npos={x=pos.x,y=pos.y,z=pos.z}
    if node.param2==0 then
        npos.z=npos.z-1
    elseif node.param2==1 then
        npos.x=npos.x-1
    elseif node.param2==2 then
        npos.z=npos.z+1
    else
        npos.x=npos.x+1
    end
    dir={x=0,y=1,z=0}
    local nnode=minetest.env:get_node(npos)
    if minetest.registered_nodes[nnode.name].frame==1 then
        local connected_nodes=get_connected_nodes(npos)
        move_nodes_vect(connected_nodes,dir)
    end
end

function frame_motor6_on(pos,node)
    local npos={x=pos.x,y=pos.y,z=pos.z}
    if node.param2==0 then
        npos.z=npos.z-1
    elseif node.param2==1 then
        npos.x=npos.x-1
    elseif node.param2==2 then
        npos.z=npos.z+1
    else
        npos.x=npos.x+1
    end
    dir={x=0,y=-1,z=0}
    local nnode=minetest.env:get_node(npos)
    if minetest.registered_nodes[nnode.name].frame==1 then
        local connected_nodes=get_connected_nodes(npos)
        move_nodes_vect(connected_nodes,dir)
    end
end


minetest.register_node("technic:frame_motor1",{
    description = "Frame motor 1",
    tiles = {"pipeworks_filter_top.png", "technic_lv_cable.png", "technic_lv_cable.png",
        "technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"},
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
    paramtype2 = "facedir",
    mesecons={effector={action_on=frame_motor1_on}},
    frames_can_connect=function(pos,dir)
        return dir.y~=-1
    end
})

minetest.register_node("technic:frame_motor2",{
    description = "Frame motor 2",
    tiles = {"technic_lv_cable.png", "pipeworks_filter_top.png", "technic_lv_cable.png",
        "technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"},
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
    paramtype2 = "facedir",
    mesecons={effector={action_on=frame_motor2_on}},
    frames_can_connect=function(pos,dir)
        return dir.y~=1
    end
})

minetest.register_node("technic:frame_motor3",{
    description = "Frame motor 3",
    tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
        "technic_lv_cable.png", "technic_lv_cable.png", "pipeworks_filter_top.png"},
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
    paramtype2 = "facedir",
    mesecons={effector={action_on=frame_motor3_on}},
    frames_can_connect=function(pos,dir)
        local node=minetest.env:get_node(pos)
        if node.param2==0 then return dir.z~=1
        elseif node.param2==1 then return dir.x~=1
        elseif node.param2==2 then return dir.z~=-1
        else return dir.x~=-1 end
    end
})

minetest.register_node("technic:frame_motor4",{
    description = "Frame motor 4",
    tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
        "technic_lv_cable.png", "technic_lv_cable.png", "pipeworks_filter_top.png"},
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
    paramtype2 = "facedir",
    mesecons={effector={action_on=frame_motor4_on}},
    frames_can_connect=function(pos,dir)
        local node=minetest.env:get_node(pos)
        if node.param2==0 then return dir.z~=1
        elseif node.param2==1 then return dir.x~=1
        elseif node.param2==2 then return dir.z~=-1
        else return dir.x~=-1 end
    end
})

minetest.register_node("technic:frame_motor5",{
    description = "Frame motor 5",
    tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
        "technic_lv_cable.png", "technic_lv_cable.png", "pipeworks_filter_top.png"},
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
    paramtype2 = "facedir",
    mesecons={effector={action_on=frame_motor5_on}},
    frames_can_connect=function(pos,dir)
        local node=minetest.env:get_node(pos)
        if node.param2==0 then return dir.z~=1
        elseif node.param2==1 then return dir.x~=1
        elseif node.param2==2 then return dir.z~=-1
        else return dir.x~=-1 end
    end
})

minetest.register_node("technic:frame_motor6",{
    description = "Frame motor 6",
    tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
        "technic_lv_cable.png", "technic_lv_cable.png", "pipeworks_filter_top.png"},
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
    paramtype2 = "facedir",
    mesecons={effector={action_on=frame_motor6_on}},
    frames_can_connect=function(pos,dir)
        local node=minetest.env:get_node(pos)
        if node.param2==0 then return dir.z~=1
        elseif node.param2==1 then return dir.x~=1
        elseif node.param2==2 then return dir.z~=-1
        else return dir.x~=-1 end
    end
})




function move_nodes_vect(poslist,vect)
    for _,pos in ipairs(poslist) do
        local npos=addVect(pos,vect)
        if minetest.env:get_node(npos).name~="air" and not(pos_in_list(poslist,npos)) then return end
    end
    nodelist={}
    for _,pos in ipairs(poslist) do
        local node=minetest.env:get_node(pos)
        local meta=minetest.env:get_meta(pos):to_table()
        nodelist[#(nodelist)+1]={pos=pos,node=node,meta=meta}
        minetest.env:remove_node(pos)
    end
    for _,n in ipairs(nodelist) do
        local npos=addVect(n.pos,vect)
        minetest.env:set_node(npos,n.node)
        local meta=minetest.env:get_meta(npos)
        meta:from_table(n.meta)
    end
end

function get_connected_nodes(pos)
    c={pos}
    local nodename=minetest.env:get_node(pos).name
    connected(pos,c,minetest.registered_nodes[nodename].frame_connect_all(pos))
    return c
end

function addVect(pos,vect)
    return {x=pos.x+vect.x,y=pos.y+vect.y,z=pos.z+vect.z}
end

function pos_in_list(l,pos)
    for _,p in ipairs(l) do
        if p.x==pos.x and p.y==pos.y and p.z==pos.z then return true end
    end
    return false
end

function connected(pos,c,adj)
    for _,vect in ipairs(adj) do
        local pos1=addVect(pos,vect)
        local nodename=minetest.env:get_node(pos1).name
        if not(pos_in_list(c,pos1)) and nodename~="air" and
        (minetest.registered_nodes[nodename].frames_can_connect==nil or
        minetest.registered_nodes[nodename].frames_can_connect(pos1,vect)) then
            c[#(c)+1]=pos1
            if minetest.registered_nodes[nodename].frame==1 then
                local adj=minetest.registered_nodes[nodename].frame_connect_all(pos1)
                connected(pos1,c,adj)
            end
        end
    end
end



Posted: Tue Feb 05, 2013 20:20
by RealBadAngel
Nore wrote:Try to upgrade to latest stairplus.

Also, I have a more or less working frame code:
Yikes! im testin it right now

WOW !
Image

Posted: Tue Feb 05, 2013 23:36
by Inocudom
In creative mode in the latest xyz build of 0.4.4, unified_inventory's inventory menu disappears and never comes back. Instead, I end up having to use the default creative menu.

Posted: Wed Feb 06, 2013 13:53
by RealBadAngel
Inocudom wrote:In creative mode in the latest xyz build of 0.4.4, unified_inventory's inventory menu disappears and never comes back. Instead, I end up having to use the default creative menu.
Please delete folder "creative" from minetest_game
UI replaces its functionality

Posted: Wed Feb 06, 2013 14:57
by RealBadAngel
Nore's frames code merged. I made for it nodeboxed frames.
Image

Posted: Wed Feb 06, 2013 16:35
by Nore
Thanks. Could you make better textures for the frame motor? Moreover, have you got a way to rotate a frame motor without using 6 different nodes?

Posted: Thu Feb 07, 2013 02:56
by RealBadAngel
Nore wrote:Thanks. Could you make better textures for the frame motor? Moreover, have you got a way to rotate a frame motor without using 6 different nodes?
im workin on the motor right now
to rotate stuff just use screwdrivers, theyre very handy :)
ofc i will need to modify its code to support also up/down

Posted: Thu Feb 07, 2013 13:51
by Axel
I've got an error while generating a map

Code: Select all

ERROR[EmergeThread]: ERROR: An unhandled exception occurred: LuaError: error: ...n\..\mods\minetest\technic-master\technic/rubber.lua:111: attempt to call method 'spawn_tree' (a nil value)
It sounds like it depends on something missing.

Posted: Thu Feb 07, 2013 14:07
by BZab
I go t it too - you need to get latest version of minetest from git

Posted: Thu Feb 07, 2013 17:05
by VanessaE
if something (technic, plantlife, moretrees, or otherwise) calls for spawn_tree, you need a build of Minetest dated Jan. 7 or later, either from one of PilzAdam's, thexyz's, or sfan5's prebuilt binaries (all for Windows), or from a nightly builds repository or compiled from source code (generally Linux users).

Posted: Fri Feb 08, 2013 14:08
by BZab
1. Am I alone? im using latest technic, but MV wires, vertical are 'invisible'... isnt missing texture?
Image



PS how to use frames and f. motors? (I think they arent just decorative)

Posted: Fri Feb 08, 2013 16:09
by RealBadAngel
BZab wrote:1. Am I alone? im using latest technic, but MV wires, vertical are 'invisible'... isnt missing texture?

PS how to use frames and f. motors? (I think they arent just decorative)
Sorry but i cannot see anythin on this screenshot.
MV wires works here without any problems.
Image

About frames: theyre still work in progress, if you would like to see them in action, please visit VanessE server, theres workin setup which uses frames.

Posted: Fri Feb 08, 2013 16:47
by BZab
OK i know ss isnt good but:
Vertical parts of MV wires are invisible
Isolation is only in "middle" of section with wire...
I'll try do better SS ;)

EDIT:
Image

(Using a bit old Misa's pack, which was made before adding MV..)