Skip to content

Instantly share code, notes, and snippets.

View AzazelN28's full-sized avatar
🏠
Working from home

Aitor Moreno AzazelN28

🏠
Working from home
View GitHub Profile
@AzazelN28
AzazelN28 / test-plain.js
Last active June 2, 2023 08:46
Performance Research
function random(min, max) {
return min + (Math.random() * (max - min))
}
class Point {
static random(min, max) {
return new Point(
random(min, max),
random(min, max)
)
@AzazelN28
AzazelN28 / azazeln28.zsh-theme
Last active January 19, 2022 14:22
ZSH Theme
#
# Determine the time since last commit. If branch is clean,
# use a neutral color, otherwise colors will vary according to time.
#
# @see https://github.com/dgp/oh-my-zsh/blob/master/themes/Soliah.zsh-theme
#
function git_time_since_commit() {
if git rev-parse --git-dir > /dev/null 2>&1; then
# Only proceed if there is actually a commit.
if last_commit=`git -c log.showSignature=false log --pretty=format:'%at' -1 2> /dev/null`; then
@AzazelN28
AzazelN28 / freq.mjs
Last active January 18, 2022 13:08
Wordle Letter Frequency Analysis
import fs from 'fs'
const words = JSON.parse(await fs.promises.readFile('words-all.json', 'utf8'))
const count = new Map()
for (const word of words) {
for (let i = 0; i < word.length; i++) {
const letter = word.charAt(i)
count.set(letter, (count.get(letter) ?? 0) + 1)
}
@AzazelN28
AzazelN28 / texture-unpacker.mjs
Created September 30, 2021 15:13
TextureUnpacker
import fs from 'fs'
import path from 'path'
import canvas from 'canvas'
const { createCanvas, loadImage } = canvas
const DEG_TO_RAD = Math.PI / 180
const RAD_TO_DEG = 180 / Math.PI
function degreesToRadians(degrees) {
@AzazelN28
AzazelN28 / sor4.js
Last active May 9, 2020 23:43
Streets of Rage 4 texture extractor
const fs = require('fs')
const path = require('path')
const { StringDecoder } = require('string_decoder')
const repl = require('repl')
const zlib = require('zlib')
const { promisify } = require('util')
const inflateRaw = promisify(zlib.inflateRaw)
const decompress = inflateRaw
function readTable(path) {
@AzazelN28
AzazelN28 / jedicfg.js
Created November 22, 2019 12:11
jedi.cfg
const fs = require('fs')
const config = fs.readFileSync('JEDI.CFG')
const signature = String.fromCharCode(config.readUInt8(0))
+ String.fromCharCode(config.readUInt8(1))
+ String.fromCharCode(config.readUInt8(2))
if (signature !== 'CFG') {
throw new Error('Invalid signature')
}
@AzazelN28
AzazelN28 / darkpilo.js
Created November 20, 2019 22:27
Star Wars: Dark Forces - DARKPILO.CFG
const fs = require('fs')
const content = fs.readFileSync('DARKPILO.CFG')
const signature = content.slice(0, 3)
if (!signature.equals(Buffer.from('PCF'))) {
throw new Error('Invalsignature DARKPILO.CFG signature')
}
const version = content.readUInt8(3)
if (version !== 0x12) {
const fs = require('fs')
const buffer = fs.readFileSync(process.argv[2])
function readEntry(buffer, offset) {
const type = buffer.slice(offset, offset + 4).toString('ascii').replace(/\u0000+$/g, '')
const name = buffer.slice(offset + 4, offset + 12).toString('ascii').replace(/\u0000+$/g, '')
const size = buffer.readUInt32LE(offset + 12)
return {
type,
name,
@AzazelN28
AzazelN28 / gource.sh
Created October 18, 2019 13:14
Recording gource output automatically
#!/bin/bash
if [[ $1 == "start" ]]; then
gource -1280x720 -s 1 -a 1 > /dev/null &
sleep 1
gst-launch-1.0 ximagesrc xname="Gource" ! queue ! video/x-raw,framerate=30/1 ! videoconvert ! vp9enc cpu-used=5 threads=12 deadline=150000 ! webmmux ! filesink location=gource.webm > /dev/null &
elif [[ $1 == "stop" ]]; then
pkill -sigint gst-launch-1.0
fi
@AzazelN28
AzazelN28 / gob2.js
Created December 31, 2018 18:59
Star Wars: Jedi Knight - Dark Forces II GOB Parser
const fs = require('fs')
const { promisify } = require('util')
const readFile = promisify(fs.readFile)
const writeFile = promisify(fs.writeFile)
function readGOB2(filePath) {
return readFile(filePath).then((buffer) => {
const header = buffer.slice(0,4).toString('ascii')
if (header !== 'GOB\x20') {