Skip to content

AlizaYInspiratioN2/Arcane-Engine

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Arcane-Engine

Arcane Engine is a real-time game engine developed and maintained by Tyrannical Games. A large focus of this project is to develop an in-house engine catered to building indie games. Arcane's development roadmap will be game development driven, meaning it will be influenced by actually making games and prioritizing features needed to ship great indie games at Tyrannical Games

Arcane Logo

Engine Showcases

Tech Reel 2019

Engine Features

  • Forward + Deferred Rendering (3D API)
  • Debug Rendering API
  • Physically Based Rendering (Fresnel on Everything)
  • Cook Torrance Specular BRDF w/ Lambertian Diffuse
  • PBR Material System
  • Parallax Occlusion Mapping
  • Light Probes (IBL)
  • Reflection Probes (IBL)
  • Linear Lighting (w/ Gamma Correction)
  • HDR w/ Reinhard Tonemapper
  • Screen Space Ambient Occlusion (SSAO)
  • MSAA (Forward Path Anti-Aliasing)
  • FXAA (Deferred Path Anti-Aliasing)
  • Directional, Point, and Spot Light Sources
  • Shadows for directional, point, and spot lights
  • Skybox Support
  • Terrain Material Blending
  • Water + Wave Simulation
  • Post Processing (Bloom, Film Grain, Chromatic Aberration, Vignette)
  • Entity Component System
  • Basic Animation Clip Player
  • Emission Maps
  • Displacement Maps

Engine Libraries

  • OpenGL 4.3+
  • GLFW Input + Window
  • Model Loading via ASSIMP (with bone data)
  • ImGUI for UI
  • STB for Image Loading
  • EnTT for Component Storage and Management

Development

If you want to see what I am currently working on check out Arcane's roadmap:

Roadmap for Arcane's Releases

Arcane v0.1

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b new-feature-branch)
  3. Commit your changes (git commit -m "A description for your feature")
  4. Push to the branch (git push origin new-feature-branch)
  5. Create a new Pull Request

Sources

  • LearnOpenGL
  • Game Engine Architecture
  • Real-Time Rendering
  • GPU Gems
  • GPU Pro
  • Hazel Series (YouTube) ArkanAssistant_backup.jsx import React, { useState, useEffect } from "react";

export default function ArkanAssistant() { const [message, setMessage] = useState(""); const [chatLog, setChatLog] = useState([]); const [listening, setListening] = useState(false); const synth = window.speechSynthesis; let recognition;

        useEffect(() => {
            const history = JSON.parse(localStorage.getItem("arkan-history")) || [];
                setChatLog(history);
                  }, []);

                    if ("webkitSpeechRecognition" in window) {
                        recognition = new window.webkitSpeechRecognition();
                            recognition.continuous = false;
                                recognition.lang = "en-US";

                                    recognition.onresult = function (event) {
                                          const transcript = event.results[0][0].transcript;
                                                setMessage(transcript);
                                                      sendMessage(transcript);
                                                          };

                                                              recognition.onerror = recognition.onend = function () {
                                                                    setListening(false);
                                                                        };
                                                                          }

                                                                            const getResponse = async (msg) => {
                                                                                try {
                                                                                      const res = await fetch("/arkan-chat", {
                                                                                              method: "POST",
                                                                                                      headers: { "Content-Type": "application/json" },
                                                                                                              body: JSON.stringify({ message: msg })
                                                                                                                    });
                                                                                                                          const data = await res.json();
                                                                                                                                return data.reply;
                                                                                                                                    } catch (err) {
                                                                                                                                          return "Arkan had a problem connecting.";
                                                                                                                                              }
                                                                                                                                                };

                                                                                                                                                  const handleCommand = (msg) => {
                                                                                                                                                      const lower = msg.toLowerCase();
                                                                                                                                                          if (lower.includes("vin")) {
                                                                                                                                                                document.getElementById("vin-iframe")?.scrollIntoView({ behavior: "smooth" });
                                                                                                                                                                    }
                                                                                                                                                                        if (lower.includes("bmw")) {
                                                                                                                                                                              window.open("https://syrel.parts/bmw", "_blank");
                                                                                                                                                                                  }
                                                                                                                                                                                      if (lower.includes("inventory")) {
                                                                                                                                                                                            alert("Opening inventory module...");
                                                                                                                                                                                                }
                                                                                                                                                                                                    if (lower.includes("clear chat")) {
                                                                                                                                                                                                          setChatLog([]);
                                                                                                                                                                                                                localStorage.removeItem("arkan-history");
                                                                                                                                                                                                                      speak("Chat cleared.");
                                                                                                                                                                                                                          }
                                                                                                                                                                                                                              if (lower.includes("restart")) {
                                                                                                                                                                                                                                    speak("Restarting...");
                                                                                                                                                                                                                                          setTimeout(() => window.location.reload(), 800);
                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                };

                                                                                                                                                                                                                                                  const speak = (text, lang = "en-US") => {
                                                                                                                                                                                                                                                      const utterance = new SpeechSynthesisUtterance(text);
                                                                                                                                                                                                                                                          utterance.lang = lang;
                                                                                                                                                                                                                                                              synth.speak(utterance);
                                                                                                                                                                                                                                                                };

                                                                                                                                                                                                                                                                  const sendMessage = async (text) => {
                                                                                                                                                                                                                                                                      handleCommand(text);
                                                                                                                                                                                                                                                                          const reply = await getResponse(text);
                                                                                                                                                                                                                                                                              const newLog = [...chatLog, { from: "you", text }, { from: "arkan", text: reply }];
                                                                                                                                                                                                                                                                                  setChatLog(newLog);
                                                                                                                                                                                                                                                                                      localStorage.setItem("arkan-history", JSON.stringify(newLog));
                                                                                                                                                                                                                                                                                          setMessage("");
                                                                                                                                                                                                                                                                                              speak(reply);
                                                                                                                                                                                                                                                                                                  fetch("/log", {
                                                                                                                                                                                                                                                                                                        method: "POST",
                                                                                                                                                                                                                                                                                                              headers: { "Content-Type": "application/json" },
                                                                                                                                                                                                                                                                                                                    body: JSON.stringify({ text: reply, source: "arkan" })
                                                                                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                                                                                          };

                                                                                                                                                                                                                                                                                                                            return (
                                                                                                                                                                                                                                                                                                                                <div style={{ padding: "15px", borderTop: "1px solid #ccc", marginTop: "20px" }}>
                                                                                                                                                                                                                                                                                                                                      <h3>πŸ”§ Arkan Assistant (Backup Version)</h3>
                                                                                                                                                                                                                                                                                                                                            <div style={{ height: "150px", overflowY: "auto", border: "1px solid #eee", padding: "5px" }}>
                                                                                                                                                                                                                                                                                                                                                    {chatLog.map((entry, i) => (
                                                                                                                                                                                                                                                                                                                                                              <div key={i} style={{ textAlign: entry.from === "you" ? "right" : "left" }}>
                                                                                                                                                                                                                                                                                                                                                                          <strong>{entry.from}:</strong> {entry.text}
                                                                                                                                                                                                                                                                                                                                                                                    </div>
                                                                                                                                                                                                                                                                                                                                                                                            ))}
                                                                                                                                                                                                                                                                                                                                                                                                  </div>
                                                                                                                                                                                                                                                                                                                                                                                                        <input
                                                                                                                                                                                                                                                                                                                                                                                                                value={message}
                                                                                                                                                                                                                                                                                                                                                                                                                        onChange={(e) => setMessage(e.target.value)}
                                                                                                                                                                                                                                                                                                                                                                                                                                placeholder="Type your message"
                                                                                                                                                                                                                                                                                                                                                                                                                                        style={{ width: "60%", marginTop: "10px" }}
                                                                                                                                                                                                                                                                                                                                                                                                                                              />
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <button onClick={() => sendMessage(message)} style={{ marginLeft: "10px" }}>Send</button>
                                                                                                                                                                                                                                                                                                                                                                                                                                                          <button
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  onClick={() => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            if (listening) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        recognition.stop();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  } else {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              recognition.start();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          setListening(true);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            }}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    style={{ marginLeft: "10px" }}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          >
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  {listening ? "πŸ›‘ Stop Mic" : "🎀 Speak"}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        </button>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              );
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              }

About

3D C/C++ Game Engine - Created By Brady Jessup

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 69.4%
  • GLSL 28.5%
  • Python 1.3%
  • Other 0.8%