Replying to @caren633881
Thank you friend. Yes it took me weeks to do it and with the help of AI I managed to pulish it, I think it's very important to the game, especially long hairs, and not all facemakers care about it
Fixing CR7🇵🇹 from PES 2014 → uploading him to retmods.com with the new features!🤖
Link here:
retmods.com/product/cristian…
✅ Skeleton Alignment [Enhance Face Animation]
✅ Hair Animation input [Blender Addon]
✅ Mouthbag Fix [Emptiness from inside the mouth]
I will be updating all of my conversions massively until we get all of the faces. Next facepack to be released is eFootball v6.00 which I've never released⏰⌛️
#eFootballPES2021
Replying to @DZMasterleague
Opa algo pasó ahi con la camiseta... De quien es el mod para ver si lo puedo ayudar a mejorar
Replying to @tTin1744041
You could, yes, but at the moment, you would have to rename the .fmdl file kit as jersey, suit or shirt. I would work on that special kit after
🆕Unlock Appearance lua module UPDATE!
Download for FREE here: 👔
ko-fi.com/s/eccedfecbe
• F9 button now has the option of instant switch between attires (suits, jerseys, shirts)
• F7 does the real face / editable hair face switch
#eFootballPES2021
🙇♂️"Hey, what do you think about playing football against those guys after work?"
🤷"Sounds great! but we didn't bring our uniforms..."
🙋♂️"So what?"
👔Unlock Appearances module update will let managers play with their suits.⚽️
In this future update, we will be able to select what manager attire we want. Of course that will apply to every model who has clothes in their ID folder (jersey.fmdl, shirt.fmdl, suit.fmdl), not only managers🤖
Replying to @alluringmedia
Too much time in the computer. It happens to me too, constant pain
Replying to @esteban_angle
La diferencia es que tu lo estabas ocupando para PES 21, yo creo que a ellos sí se molestaron pero no les dolió tanto como Durandil q les estaba quitando la mina de oro de eFootball al modear ese juego
Replying to @Durandil67
I hope this is pure sarcasm, friend. Even if they threatened you, the only thing they can do is ban you, I've never seen a modder getting sued or in jail because of modding a game, it's something that has been happening for 20+ years
Replying to @DongouTang
A tool is not needed, friend, only a blender script and you just run it by pressing ►. You can try it in your blender scene if you want.
• Back up your original face.fpk just in case
• It will work on the mesh named "mesh_id_face_0", so if your head is named differently, change it to mesh_id_face_0
• this will work only on converted eFootball faces that preserved their original uvmap (because I saw some conversions where people change the uvmap to PES21 uvmap)
• Run the script in object mode (no need to go to edit mode since the script already does it)
this is the script:
import bpy
import bmesh
from mathutils import Vector
# ================== CONFIGURACION ==================
NOMBRE_OBJETO = "mesh_id_face_0"
UV_CENTRO = (0.500, 0.388) # centro UV del agujero de la boca (visto en el panel UV Vertex)
VERTS_ESPERADOS = 54 # cantidad de vertices del borde (para verificar)
DESPLAZAMIENTO = (0.0, 0.05, 0.0) # extrusion en eje Y GLOBAL (+0.05)
# ===================================================
# 0) Seleccionar el objeto
obj = bpy.data.objects.get(NOMBRE_OBJETO)
if obj is None:
raise Exception("No existe el objeto '%s'" % NOMBRE_OBJETO)
if bpy.context.object and bpy.context.object.mode != 'OBJECT':
bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.select_all(action='DESELECT')
obj.select_set(True)
bpy.context.view_layer.objec… = obj
# 1) Entrar a Edit Mode (modo seleccion de vertices)
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_mode(type='VERT')
me = obj.data
bm = bmesh.from_edit_mesh(me)
uv_layer = bm.loops.layers.uv.active
if uv_layer is None:
raise Exception("El objeto no tiene mapa UV")
# Deseleccionar todo
for f in bm.faces:
f.select = False
for e in bm.edges:
e.select = False
for v in bm.verts:
v.select = False
# 2) Encontrar el borde abierto de la boca
# Se agrupan los bordes abiertos (edges con una sola cara) en anillos conectados
# y se elige el anillo cuyo centro UV esta mas cerca de UV_CENTRO.
bordes = [e for e in bm.edges if e.is_boundary]
visitados = set()
grupos = []
for e_ini in bordes:
if e_ini in visitados:
continue
pila = [e_ini]
visitados.add(e_ini)
edges_grupo = []
while pila:
e = pila.pop()
edges_grupo.append(e)
for v in e.verts:
for e2 in v.link_edges:
if e2.is_boundary and e2 not in visitados:
visitados.add(e2)
pila.append(e2)
verts_grupo = set()
for e in edges_grupo:
verts_grupo.update(e.verts)
grupos.append((edges_grupo, list(verts_grupo)))
if not grupos:
raise Exception("El objeto no tiene bordes abiertos")
def centro_uv(verts):
suma = Vector((0.0, 0.0))
n = 0
for v in verts:
for loop in v.link_loops:
suma += loop[uv_layer].uv
n += 1
return suma / n if n else Vector((99.0, 99.0))
print("\n--- Bordes abiertos encontrados ---")
mejor = None
mejor_dist = None
objetivo = Vector(UV_CENTRO)
for i, (eds, vts) in enumerate(grupos):
c = centro_uv(vts)
d = (c - objetivo).length
print(" Borde %d: %d vertices, centro UV (%.3f, %.3f), distancia %.4f" % (i, len(vts), c.x, c.y, d))
if mejor is None or d < mejor_dist:
mejor, mejor_dist = (eds, vts), d
edges_sel, verts_sel = mejor
print("Elegido: %d vertices" % len(verts_sel))
if len(verts_sel) != VERTS_ESPERADOS:
print("AVISO: se esperaban %d vertices. Revisa la lista de arriba." % VERTS_ESPERADOS)
for v in verts_sel:
v.select = True
for e in edges_sel:
e.select = True
bm.select_flush(True) # igual que Blender al seleccionar vertices a mano
# 3) Extrude Region + mover en Y global 0.05
geom = ([v for v in bm.verts if v.select] +
[e for e in bm.edges if e.select] +
[f for f in bm.faces if f.select])
ret = bmesh.ops.extrude_face_region(bm, geom=geom)
nuevos_verts = [g for g in ret["geom"] if isinstance(g, bmesh.types.BMVert)]
nuevos_edges = [g for g in ret["geom"] if isinstance(g, bmesh.types.BMEdge)]
nuevas_caras = [g for g in ret["geom"] if isinstance(g, bmesh.types.BMFace)]
# convertir el desplazamiento global a coordenadas locales del objeto
desp_local = obj.matrix_world.inverted().to_3x3() @ Vector(DESPLAZAMIENTO)
bmesh.ops.translate(bm, vec=desp_local, verts=nuevos_verts)
# 4) Escalar a 0 (S 0) respecto al punto medio
centro = Vector((0.0, 0.0, 0.0))
for v in nuevos_verts:
centro += v.co
centro /= len(nuevos_verts)
for v in nuevos_verts:
v.co = centro.copy()
# dejar seleccionado solo lo nuevo (como queda en Blender tras extruir)
for f in bm.faces:
f.select = False
for e in bm.edges:
e.select = False
for v in bm.verts:
v.select = False
for g in nuevos_verts + nuevos_edges + nuevas_caras:
g.select = True
bmesh.update_edit_mesh(me)
# 5) Volver a Object Mode
bpy.ops.object.mode_set(mode='OBJECT')
print("Listo: %d vertices extruidos y escalados a 0." % len(nuevos_verts))
5 months have passed and maybe now I can insert eFootball real hair strands to PES 2021 with the help of AI... but I've never tried to this day, if someone has already tried, let me know about it, so I can help
Replying to @GabriFacemaker
Maybe you can unlock all hairs to have a hair strand option, I will try it in PES 2021 in the future even if the engine doesn't let it


