hooray i finally made something that works almost completely