Tapioca Engine 1.0
Motor de videojuegos creado por Bubble Studios
Cargando...
Buscando...
Nada coincide
Tapioca Engine

Autores

Descripción

El motor de videojuegos Tapioca Engine es un proyecto de software libre desarrollado por estudiantes de la Universidad Complutense de Madrid. El motor está siendo desarrollado en el marco de la asignatura de Proyectos 3 del Grado en Desarrollo de Videojuegos.

Arquitectura y proceso de desarrollo

Tapioca Engine está desarrollado en C++ con Visual Studio.

El motor se divide en varios módulos que se encargan de diferentes aspectos del desarrollo de videojuegos. Estos módulos son:

  • Bridge: Módulo encargado de la creación de escenas, entidades y componentes cargados desde archivos .lua
  • Core: Módulo encargado de la creación de las factorías, la gestión de eventos y bucle principal
  • Graphics: Módulo encargado del renderizado de los gráficos
  • Input: Módulo encargado de la gestión de la entrada
  • Physics: Módulo encargado de la simulación física
  • Audio: Módulo encargado de la gestión del audio
  • UI: Módulo encargado de la gestión de la interfaz gráfica
  • Exports: Módulo encargado de crear una librería dinámica que incluye los módulos anteriores
  • Main: Módulo encargado de ejecutar el motor

Los motores de tecnología hacen uso de diferentes bibliotecas para su funcionamiento. Tapioca Engine se hace uso de las siguientes:

Se sigue una arquitectura basada en entidades y componentes (EC), y se hace uso de patrones de diseño, especialmente el patrón de factoría o Factory Method.

El proceso de desarrollo del motor sigue una metodología ágil, concretamente Scrum. Para ver el tablero de tareas, haz click aquí

Pipeline de generación de contenido

Motor

Los distintos módulos que componen el motor han sido desarrollados en la rama main, utilizando ramas separadas únicamente para subir código que no compilaba en ese momento.

Juegos

La funcionalidad de cada juego viene dada por los componentes que conforman sus entidades. El proyecto cuenta con 2 juegos (ambos desarrollados en paralelo), y a medida que se han ido ampliando las funcionalidades de motor se han ido incorporando nuevos elementos al juego.

Los links a los repositorios de los juegos son los siguientes:

Assets

  • Assets visuales 2D: se utilizan imágenes en formato .png para que se respeten las transparencias correctamente, con 72 dpi, que es la resolución óptima para pantallas.

  • Assets visuales 3D: OGRE no permite trabajar directamente con .fbx o .glb como otros motores, si no que trabaja con sus propios formatos usando .mesh para mallas, .material para materiales y .skeleton para los rigs.

    Estos formatos no son los más utilizados y la mayoría de assets que se pueden encontrar online (sean gratis o de pago) suelen estar en formatos como .fbx. Para obtener contenido utilizable para nuestro motor de render hemos utilizado Blender y el plugin gratuito blender2Ogre.

    Con blender2Ogre hemos importado assets de terceros o creado los nuestros propios con Blender, y hemos exportado las mallas en .mesh. Además, también se exporta un .mesh.xml más legible para leer donde se especifican los vértices de la malla y el esqueleto que tiene asociado.

    Los materiales en .material de acuerdo con los estándares .glTF (glTF 2.0 — Blender Manual) implica que no todo lo que podemos hacer en Blender con materiales se exportará correctamente, pero sí los atributos básicos como el color y las componentes metálica y difusa.

  • Assets sonoros: Existe multitud de formatos de audio en nuestro caso hemos utilizado el formato .mp3, ya que IrrKlang soporta dicho formato de manera nativa.

Guía de uso del mapeo de teclas

Para el mapeo de controles, se usa un archivo llamado controlsMapping.Lua con el siguiente formato:

events = {
ev_NOMBRE_EVENTO = {
src = origen_del_evento,
control = valorDelInput
},
...
}

Para mapear el mismo evento a varios controles, hay que añadir al final del nombre del evento un _N, siendo N un número que lo diferencie del resto de eventos con el mismo nombre.


Los posibles valores de src son los siguientes:

ie_closeWindow cerrar vebtaba
ie_keyUp pulsar tecla
ie_keyDown soltar tecla
ie_mouseMoving mover ratón
ie_mouseButtonUp soltar botón del ratón
ie_mouseButtonDown pulsar botón del ratón
ie_mouseWheel girar rueda del ratón
ie_ctrlAxisMotion mover eje del mando
ie_ctrlButtonUp soltar botón del mando
ie_ctrlButtonDown pulsar botón del mando

Y los posibles valores de control son los siguientes:

  • Teclado:
    UNKNOWN = 0
    RETURN = 13
    ESCAPE = 27
    BACKSPACE = 8
    TAB = 9
    SPACE = 32
    EXCLAIM = 33
    QUOTEDBL = 34
    HASH = 35
    PERCENT = 37
    DOLLAR = 36
    AMPERSAND = 38
    QUOTE = 39
    LEFTPAREN = 40
    RIGHTPAREN = 41
    ASTERISK = 42
    PLUS = 43
    COMMA = 44
    MINUS = 45
    PERIOD = 46
    SLASH = 47
    0 = 48
    1 = 49
    2 = 50
    3 = 51
    4 = 52
    5 = 53
    6 = 54
    7 = 55
    8 = 56
    9 = 57
    COLON = 58
    SEMICOLON = 59
    LESS = 60
    EQUALS = 61
    GREATER = 62
    QUESTION = 63
    AT = 64
    LEFTBRACKET = 91
    BACKSLASH = 92
    RIGHTBRACKET = 93
    CARET = 94
    UNDERSCORE = 95
    BACKQUOTE = 96
    a = 97
    b = 98
    c = 99
    d = 100
    e = 101
    f = 102
    g = 103
    h = 104
    i = 105
    j = 106
    k = 107
    l = 108
    m = 109
    n = 110
    o = 111
    p = 112
    q = 113
    r = 114
    s = 115
    t = 116
    u = 117
    v = 118
    w = 119
    x = 120
    y = 121
    z = 122
    CAPSLOCK = 1073741881
    F1 = 1073741882
    F2 = 1073741883
    F3 = 1073741884
    F4 = 1073741885
    F5 = 1073741886
    F6 = 1073741887
    F7 = 1073741888
    F8 = 1073741889
    F9 = 1073741890
    F10 = 1073741891
    F11 = 1073741892
    F12 = 1073741893
    PRINTSCREEN = 1073741894
    SCROLLLOCK = 1073741895
    PAUSE = 1073741896
    INSERT = 1073741897
    HOME = 1073741898
    PAGEUP = 1073741899
    DELETE = 1073741900
    END = 1073741901
    PAGEDOWN = 1073741902
    RIGHT = 1073741903
    LEFT = 1073741904
    DOWN = 1073741905
    UP = 1073741906
    NUMLOCKCLEAR = 1073741907
    KP_DIVIDE = 1073741908
    KP_MULTIPLY = 1073741909
    KP_MINUS = 1073741910
    KP_PLUS = 1073741911
    KP_ENTER = 1073741912
    KP_1 = 1073741913
    KP_2 = 1073741914
    KP_3 = 1073741915
    KP_4 = 1073741916
    KP_5 = 1073741917
    KP_6 = 1073741918
    KP_7 = 1073741919
    KP_8 = 1073741920
    KP_9 = 1073741921
    KP_0 = 1073741922
    KP_PERIOD = 1073741923
    APPLICATION = 1073741925
    POWER = 1073741926
    KP_EQUALS = 1073741927
    F13 = 1073741928
    F14 = 1073741929
    F15 = 1073741930
    F16 = 1073741931
    F17 = 1073741932
    F18 = 1073741933
    F19 = 1073741934
    F20 = 1073741935
    F21 = 1073741936
    F22 = 1073741937
    F23 = 1073741938
    F24 = 1073741939
    EXECUTE = 1073741940
    HELP = 1073741941
    MENU = 1073741942
    SELECT = 1073741943
    STOP = 1073741944
    AGAIN = 1073741945
    UNDO = 1073741946
    CUT = 1073741947
    COPY = 1073741948
    PASTE = 1073741949
    FIND = 1073741950
    MUTE = 1073741951
    VOLUMEUP = 1073741952
    VOLUMEDOWN = 1073741953
    KP_COMMA = 1073741957
    KP_EQUALSAS400 = 1073741958
    ALTERASE = 1073741977
    SYSREQ = 1073741978
    CANCEL = 1073741979
    CLEAR = 1073741980
    PRIOR = 1073741981
    RETURN2 = 1073741982
    SEPARATOR = 1073741983
    OUT = 1073741984
    OPER = 1073741985
    CLEARAGAIN = 1073741986
    CRSEL = 1073741987
    EXSEL = 1073741988
    KP_00 = 1073741989
    KP_000 = 1073741990
    THOUSANDSSEPARATOR = 1073741991
    DECIMALSEPARATOR = 1073741992
    CURRENCYUNIT = 1073741993
    CURRENCYSUBUNIT = 1073741994
    KP_LEFTPAREN = 1073741995
    KP_RIGHTPAREN = 1073741996
    KP_LEFTBRACE = 1073741997
    KP_RIGHTBRACE = 1073741998
    KP_TAB = 1073741999
    KP_BACKSPACE = 1073742000
    KP_A = 1073742001
    KP_B = 1073742002
    KP_C = 1073742003
    KP_D = 1073742004
    KP_E = 1073742005
    KP_F = 1073742006
    KP_XOR = 1073742007
    KP_POWER = 1073742008
    KP_PERCENT = 1073742009
    KP_LESS = 1073742010
    KP_GREATER = 1073742011
    KP_AMPERSAND = 1073742012
    KP_DBLAMPERSAND = 1073742013
    KP_VERTICALBAR = 1073742014
    KP_DBLVERTICALBAR = 1073742015
    KP_COLON = 1073742016
    KP_HASH = 1073742017
    KP_SPACE = 1073742018
    KP_AT = 1073742019
    KP_EXCLAM = 1073742020
    KP_MEMSTORE = 1073742021
    KP_MEMRECALL = 1073742022
    KP_MEMCLEAR = 1073742023
    KP_MEMADD = 1073742024
    KP_MEMSUBTRACT = 1073742025
    KP_MEMMULTIPLY = 1073742026
    KP_MEMDIVIDE = 1073742027
    KP_PLUSMINUS = 1073742028
    KP_CLEAR = 1073742029
    KP_CLEARENTRY = 1073742030
    KP_BINARY = 1073742031
    KP_OCTAL = 1073742032
    KP_DECIMAL = 1073742033
    KP_HEXADECIMAL = 1073742034
    LCTRL = 1073742035
    LSHIFT = 1073742036
    LALT = 1073742037
    LGUI = 1073742038
    RCTRL = 1073742039
    RSHIFT = 1073742040
    RALT = 1073742041
    RGUI = 1073742042
    MODE = 1073742043
    AUDIONEXT = 1073742044
    AUDIOPREV = 1073742045
    AUDIOSTOP = 1073742046
    AUDIOPLAY = 1073742047
    AUDIOMUTE = 1073742048
    MEDIASELECT = 1073742049
    WWW = 1073742050
    MAIL = 1073742051
    CALCULATOR = 1073742052
    COMPUTER = 1073742053
    AC_SEARCH = 1073742054
    AC_HOME = 1073742055
    AC_BACK = 1073742056
    AC_FORWARD = 1073742057
    AC_STOP = 1073742058
    AC_REFRESH = 1073742059
    AC_BOOKMARKS = 1073742060
    BRIGHTNESSDOWN = 1073742061
    BRIGHTNESSUP = 1073742062
    DISPLAYSWITCH = 1073742063
    KBDILLUMTOGGLE = 1073742064
    KBDILLUMDOWN = 1073742065
    KBDILLUMUP = 1073742066
    EJECT = 1073742067
    SLEEP = 1073742068
    APP1 = 1073742069
    APP2 = 1073742070
    AUDIOREWIND = 1073742071
    AUDIOFASTFORWARD = 1073742072
    SOFTLEFT = 1073742073
    SOFTRIGHT = 1073742074
    CALL = 1073742075
    ENDCALL = 1073742076
  • Ratón:
    BUTTON_LEFT = 1
    BUTTON_MIDDLE = 2
    BUTTON_RIGHT = 3
    BUTTON_X1 = 4
    BUTTON_X2 = 5
  • Ejes del mando:
    CONTROLLER_BUTTON_INVALID = -1
    CONTROLLER_BUTTON_A = 0
    CONTROLLER_BUTTON_B = 1
    CONTROLLER_BUTTON_X = 2
    CONTROLLER_BUTTON_Y = 3
    CONTROLLER_BUTTON_BACK = 4
    CONTROLLER_BUTTON_GUIDE = 5
    CONTROLLER_BUTTON_START = 6
    CONTROLLER_BUTTON_LEFTSTICK = 7
    CONTROLLER_BUTTON_RIGHTSTICK = 8
    CONTROLLER_BUTTON_LEFTSHOULDER = 9
    CONTROLLER_BUTTON_RIGHTSHOULDER = 10
    CONTROLLER_BUTTON_DPAD_UP = 11
    CONTROLLER_BUTTON_DPAD_DOWN = 12
    CONTROLLER_BUTTON_DPAD_LEFT = 13
    CONTROLLER_BUTTON_DPAD_RIGHT = 14
    CONTROLLER_BUTTON_MISC1 = 15 /* Xbox Series X share button PS5 microphone button Nintendo Switch Pro capture button Amazon Luna microphone button */
    CONTROLLER_BUTTON_PADDLE1 = 16 /* Xbox Elite paddle P1 (upper left facing the back) */
    CONTROLLER_BUTTON_PADDLE2 = 17 /* Xbox Elite paddle P3 (upper right facing the back) */
    CONTROLLER_BUTTON_PADDLE3 = 18 /* Xbox Elite paddle P2 (lower left facing the back) */
    CONTROLLER_BUTTON_PADDLE4 = 19 /* Xbox Elite paddle P4 (lower right facing the back) */
    CONTROLLER_BUTTON_TOUCHPAD = 20 /* PS4/PS5 touchpad button */
    CONTROLLER_BUTTON_MAX = 21
  • Botones del mando:
    CONTROLLER_AXIS_INVALID = -1
    CONTROLLER_AXIS_LEFTX = 0
    CONTROLLER_AXIS_LEFTY = 1
    CONTROLLER_AXIS_RIGHTX = 2
    CONTROLLER_AXIS_RIGHTY = 3
    CONTROLLER_AXIS_TRIGGERLEFT = 4
    CONTROLLER_AXIS_TRIGGERRIGHT = 5
    CONTROLLER_AXIS_MAX = 6

¡Síguenos en nuestras redes sociales!

YouTube BadgeTwitter Badge

¡Contáctanos por correo!

Contact Badge