37 Commits

Author SHA1 Message Date
Raum0x2A
e078afbbe5 Merge branch 'develop' of gitlab.com:Raum0x2A/nmslib into develop 2021-05-30 08:03:19 -06:00
Raum0x2A
511331008e Minor changes 2021-05-30 08:02:55 -06:00
Raum0x2A
6fbbe0b23c Update .gitlab-ci.yml file 2021-05-26 23:31:53 +00:00
Raum0x2A
b24a16edad Update .gitlab-ci.yml 2021-05-26 23:22:26 +00:00
Raum0x2A
3588826556 minor fix 2021-05-26 15:57:04 -06:00
Raum0x2A
98d812c904 Minor changes 2021-05-26 15:49:17 -06:00
Raum0x2A
86bc493ead Updated - v1.0.0 2021-05-26 15:15:13 -06:00
Raum0x2A
3cfae880ee Updated - v1.0.0 2021-05-26 15:13:30 -06:00
Raum0x2A
b41f25646d Split up Create banner finction
nmslib.CreateBanner() now calls nmslib.GenRawBanner() for the
majority of processing createbanner now just calls the gen func
and saves the file.

GenRawBanner() returns an image.Image type for more processing by
another function. this will be used for upcoming features.

tests have been updated as needed

upddated go.mod and go.sum
2021-05-24 13:11:56 -06:00
Raum0x2A
94f9b4e15c Greatly improved translator feature
The translator feature has been completely rewritten, and can now
convert any game language to any other.
2021-05-20 19:22:17 -06:00
Raum0x2A
6d3a57d31c Revert "WIP - rebuilding translator"
This reverts commit ab420a0a44.
2021-05-20 19:05:29 -06:00
Raum0x2A
ab420a0a44 WIP - rebuilding translator 2021-05-20 14:33:33 -06:00
Raum0x2A
a0d9dbd269 Merge branch 'translator' into 'develop'
Updates and Features

See merge request Raum0x2A/nmslib!3
2021-05-19 21:23:39 +00:00
Raum0x2A
60de0ebb46 Updates and Features 2021-05-19 21:23:39 +00:00
Raum0x2A
a370e0f33d only run master/develop 2021-05-18 08:55:14 -06:00
Raum0x2A
5faa96d8a7 ignore*feat 2021-05-18 08:53:00 -06:00
Raum0x2A
c8f6d51ba1 Merge branch 'portalbanner-resize' into 'develop'
Moved from gim to gg for image creation

See merge request Raum0x2A/nmslib!2
2021-05-18 04:57:05 +00:00
Raum0x2A
2397ec9aee Moved from gim to gg for image creation 2021-05-18 04:57:05 +00:00
Raum0x2A
21360acadf Updated 2021-05-11 18:11:51 -06:00
Raum0x2A
4aded9c17f Updated README.md
Corrected usage of nmslib.Translate{}
2021-05-11 23:56:00 +00:00
Raum0x2A
8945530dbf Updated 2021-05-08 09:39:28 -06:00
Raum0x2A
73fa913292 Merge branch 'master' into develop 2021-05-08 09:35:48 -06:00
Raum0x2A
47db5b0767 Fixed namespace/go mod tidy 2021-05-07 10:29:58 -06:00
Raum0x2A
faf72d1f7a Deleted assets/glyphs/dark/PORTALSYMBOL.0.png, assets/glyphs/dark/PORTALSYMBOL.1.png, assets/glyphs/dark/PORTALSYMBOL.2.png, assets/glyphs/dark/PORTALSYMBOL.3.png, assets/glyphs/dark/PORTALSYMBOL.4.png, assets/glyphs/dark/PORTALSYMBOL.5.png, assets/glyphs/dark/PORTALSYMBOL.6.png, assets/glyphs/dark/PORTALSYMBOL.7.png, assets/glyphs/dark/PORTALSYMBOL.8.png, assets/glyphs/dark/PORTALSYMBOL.9.png, assets/glyphs/dark/PORTALSYMBOL.A.png, assets/glyphs/dark/PORTALSYMBOL.B.png, assets/glyphs/dark/PORTALSYMBOL.C.png, assets/glyphs/dark/PORTALSYMBOL.D.png, assets/glyphs/dark/PORTALSYMBOL.E.png, assets/glyphs/dark/PORTALSYMBOL.F.png, assets/glyphs/light/PORTALSYMBOL.0.png, assets/glyphs/light/PORTALSYMBOL.1.png, assets/glyphs/light/PORTALSYMBOL.2.png, assets/glyphs/light/PORTALSYMBOL.3.png, assets/glyphs/light/PORTALSYMBOL.4.png, assets/glyphs/light/PORTALSYMBOL.5.png, assets/glyphs/light/PORTALSYMBOL.6.png, assets/glyphs/light/PORTALSYMBOL.7.png, assets/glyphs/light/PORTALSYMBOL.8.png, assets/glyphs/light/PORTALSYMBOL.9.png, assets/glyphs/light/PORTALSYMBOL.A.png, assets/glyphs/light/PORTALSYMBOL.B.png, assets/glyphs/light/PORTALSYMBOL.C.png, assets/glyphs/light/PORTALSYMBOL.D.png, assets/glyphs/light/PORTALSYMBOL.E.png, assets/glyphs/light/PORTALSYMBOL.F.png, assets/lang/atlas-lang.csv, assets/lang/gek-lang.csv, assets/lang/korvax-lang.csv, assets/lang/vykeen-lang.csv files 2021-05-07 15:53:04 +00:00
Raum0x2A
7c5d4b5ce8 Updated 2021-05-06 22:47:55 -06:00
Raum0x2A
ad42c6bb04 Updated 2021-05-06 22:02:21 -06:00
Raum0x2A
5ca88596ff Added vertical example of portal banner 2021-05-06 21:49:17 -06:00
Raum0x2A
53d85d958b modified .gitignore 2021-05-06 20:26:45 -06:00
Raum0x2A
ea51873fe3 Upddated Go version 2021-05-06 19:58:19 -06:00
Raum0x2A
90d743286f Minor Changes 2021-05-06 16:51:09 -06:00
Raum0x2A
bc0c364dcc added .gitignore 2021-05-06 16:40:48 -06:00
Raum0x2A
43496932ef removed some debug output 2021-05-06 11:32:47 -06:00
Raum0x2A
d6bfa643a9 added assets.go 2021-05-06 11:21:35 -06:00
Raum0x2A
877517b923 exported t.Word in nmslib.Translate literal 2021-05-06 09:48:53 -06:00
Raum0x2A
ccbd68aee8 Added dark mode option to CreateBanner() func
- Fixed PORTALSYMBOL file names
- Now using image files from assets/glyphs
- CreateBanner() func options tweaked
2021-05-06 00:52:01 -06:00
Raum0x2A
5077876106 Minor changes 2021-05-06 00:51:00 -06:00
Raum0x2A
9682494ce1 Removed resources.go
`resources.go` is no more! All glyphs, and Lang files have been
extracted to the assets folder. A complete rework of
`glyphbanner.go` is begining.

 - resources.go -> DELETED
2021-05-05 22:12:14 -06:00
19 changed files with 590 additions and 422 deletions

5
.gitignore vendored
View File

@@ -1 +1,6 @@
assets/
.vscode/
notes.txt
Test.png
test.png
coverage.txt

View File

@@ -1,9 +1,30 @@
# This file is a template, and might need editing before it works on your project.
image: golang:latest
include:
- template: Security/License-Scanning.gitlab-ci.yml
variables:
# Please edit to your GitLab project
REPO_NAME: gitlab.com/Raum0x2A/nmslib
# The problem is that to be able to use go get, one needs to put
# the repository in the $GOPATH. So for example if your gitlab domain
# is gitlab.com, and that your repository is namespace/project, and
# the default GOPATH being /go, then you'd need to have your
# repository in /go/src/gitlab.com/namespace/project
# Thus, making a symbolic link corrects this.
before_script:
- mkdir -p $GOPATH/src/$(dirname $REPO_NAME)
- ln -svf $CI_PROJECT_DIR $GOPATH/src/$REPO_NAME
- cd $GOPATH/src/$REPO_NAME
stages:
- test
test:
format:
stage: test
image: golang:1.16.3
script:
- go fmt $(go list ./...)
- go vet $(go list ./...)
- go test

BIN
NMH-BlueDream.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 KiB

128
README.md
View File

@@ -1,8 +1,11 @@
# NMSlib
**master Branch** : ![](https://gitlab.com/Raum0x2A/nmslib/badges/master/pipeline.svg)
**develop Branch** : ![](https://gitlab.com/Raum0x2A/nmslib/badges/develop/pipeline.svg)
[![](https://img.shields.io/badge/License%20-MIT-green)](COPYING)
[![GoDoc](https://godoc.org/gitlab.com/Raum0x2A/nmslib?status.svg)](https://godoc.org/gitlab.com/Raum0x2A/nmslib)
[![](https://img.shields.io/gitlab/pipeline/Raum0x2A/nmslib/master?label=Master&logo=go)](https://gitlab.com/Raum0x2A/nmslib)
[![](https://img.shields.io/gitlab/pipeline/Raum0x2A/nmslib/develop?label=Develop&logo=go)](https://gitlab.com/Raum0x2A/nmslib/-/tree/develop)
[![](https://img.shields.io/badge/Release-v1.0.1-blue?style=flat&logo=go)](https://gitlab.com/Raum0x2A/nmslib/-/releases/v1.0.1)
[![Go Report Card](https://goreportcard.com/badge/gitlab.com/Raum0x2A/nmslib)](https://goreportcard.com/report/gitlab.com/Raum0x2A/nmslib)
NMSlib is a GoLang package for dealing with converting Galactic coordinates to Portal codes and vice versa.
@@ -13,13 +16,13 @@ NMSlib also translates in game languages (Korvax, Gek Vy'Keen and Atlas) to engl
To install this module use `go get`
```bash
```golang
go get -u gitlab.com/Raum0x2A/nmslib
```
## Usage
**Example:**
### Example:
```golang
package main
@@ -32,25 +35,32 @@ import (
func main() {
portalcode := "21F2F8EDB94D"
tstvar, err := nmslib.P2gc(portalcode)
galacticCoords, err := nmslib.P2gc(portalcode)
if err != nil {
panic(err)
}
fmt.Printf("Input:\t%s\nExpecting:\t014C:0077:06DA:01F2\nHave:\t%s\n", portalcode, tstvar)
fmt.Printf("Input:\t%s\nOutput:\t%s\n", portalcode, galacticCoords)
nmslib.CreateBanner(portalcode, "NewLennon.png", 0)
nmslib.CreateBanner(RndPortal(), "Random.png", 0)
g2p, err := nmslib.Gc2p("014C:0077:06DA:01F2", 2)
if err != nil {
panic(err)
}
fmt.Printf("Input:\t014C:0077:06DA:01F2\nOutput:\t%s\n", g2p)
fmt.Println(nmslib.Translate{"KIHTYOMOLES"}.Kor2Eng())
korvax := nmslib.Translate{"Contraband"}
fmt.Println(nmslib.korvax.Eng2Kor())
_ := nmslib.CreateBanner(portalcode, "./NMH-BlueDream.png", 0)
_ := nmslib.CreateBanner(nmslib.RndPortal(), "./Random.png", 0)
fmt.Println(nmslib.Translate{Lang: "korvax"}.ToEng("KIHTYOMOLES"))
korvax := nmslib.Translate{"english"}
fmt.Println(korvax.ToKorvax("Contraband"))
}
```
### Creating a Glyph banner with CreateBanner()
## Creating a Glyph banner
This function takes 3 parameters:
This function takes 3 parameters and reurns an error
* portalcode: 12 char hex string of portal location
* savename: Save location and name
@@ -63,29 +73,34 @@ This function takes 3 parameters:
**Example:**
Horizontal Layout for Galactic Hub [HUB10-6A Icarus Sun](https://nomanssky.gamepedia.com/HUB10-6A_Icarus_Sun) Eniwa 68/L3
Horizontal Layout for the NMH Capital planet [Blue Dream (aka Omins XI)](https://nomanssky.fandom.com/wiki/Omins_XI) in the [Notric-Lis XIII](https://nomanssky.fandom.com/wiki/Notric-Lis_XIII) system in the [Lahanhar Conflux](https://nomanssky.fandom.com/wiki/Lahanhar_Conflux) region
```golang
nmslib.CreateBanner("006AFA556C30", "NewLennon.png", 0)
err := nmslib.CreateBanner("21F2F8EDB94D", "NMH-BlueDream.png", 0)
if err !=nil {
panic(err)
}
```
![](NewLennon.png)
![](NMH-BlueDream.png)
Vertical layout for a random address
```golang
nmslib.CreateBanner(nmslib.RndPortal(), "ranportal.png", 11)
err := nmslib.CreateBanner(nmslib.RndPortal(), "ranportal.png", 11)
if err != nil {
panic(err)
}
```
![](ranportal_scaled.png)
_Note: Images shown in readme.md have been scaled down in gimp._
_Note: Image shown in readme.md's vertical example have been scaled down in gimp for easier viewing on gitlab._
_Original Vertical: 256x3072px_
_Original ranportal.png: 256x3072px_
_Original: Horizontal: 3072x256px_
### Converting Portal code to Galactic address with P2gc()
### Converting Portal code to Galactic address
This function only takes 1 parameter and returns a string and error
@@ -94,7 +109,7 @@ This function only takes 1 parameter and returns a string and error
**Example:**
```golang
ga, _ := nmslib.P3gc("21F2F8EDB94D")
ga, _ := nmslib.P2gc("21F2F8EDB94D")
fmt.Println(ga)
```
@@ -102,16 +117,17 @@ Output:
``014C:0077:06DA:01F2``
### Converting Galactic coordinates to Portal codes with Gc2p()
### Converting Galactic coordinates to Portal codes
This function only takes 1 parameter and returns a string and error
This function only takes 2 parameters and returns a string and error
* galacticaddress: 16 char 4 block hex address
* Planet ID [1-6]
**Example:**
```golang
pc, _ := nmslib.P3gc("014C:0077:06DA:01F2")
pc, _ := nmslib.Gc2p("014C:0077:06DA:01F2", 2)
fmt.Println(pc)
```
@@ -128,23 +144,25 @@ Supported languages
- Vy'keen
- Atlas
### Translate Atlas to English with Atl2Eng()
### Translate Atlas to English
This function takes only 1 parameter and returns a string
* Word: Any known Atlas word (ex. Paka)
_note: Translating to english will **always** result in the lowercase equivilent word_
**Example:**
```golang
fmt.Println(nmslib.Translate{"Paka"}.Atl2Eng())
fmt.Println(nmslib.Translate{Lang: "atlas"}.ToEng("Paka"))
```
Output:
``Awake``
``awake``
### Translate English to Korvax with Eng2Korvax()
### Translate English to Korvax
This function takes only 1 parameter and returns a string
@@ -153,8 +171,8 @@ This function takes only 1 parameter and returns a string
**Example:**
```golang
korvax := nmslib.Translate{"Contraband"}
fmt.Println(korvax.Eng2Kor())
korvax := nmslib.Translate{"english"}
fmt.Println(korvax.ToKorvax("Contraband"))
```
Output:
@@ -164,38 +182,52 @@ Output:
### Language commands
Gek:
- ``Translate{string}.Gek2Eng()``
- ``Translate{string}.Eng2Gek()``
- ``Translate{Lang: ``string``}.ToEng(``string``)``
- ``Translate{Lang: ``string``}.ToKorvax(``string``)``
- ``Translate{Lang: ``string``}.ToGek(``string``)``
- ``Translate{Lang: ``string``}.ToVykeen(``string``)``
- ``Translate{Lang: ``string``}.ToAtlat(``string``)``
Korvax:
- ``Translate{string}.Kor2Eng()``
- ``Translate{string}.Eng2Kor()``
#### Possible Lang string options
Vy'keen:
- ``Translate{string}.Vyk2Eng()``
- ``Translate{string}.Eng2Vyk()``
- ``"english"``
- ``"korvax"``
- ``"gek"``
- ``"vykeen"``
- ``"atlas"``
Atlas:
- ``Translate{string}.Atl2Eng()``
- ``Translate{string}.Eng2Atl()``
## Random Portal address
### Create a random portal address
Generate random portal codes
- Atlas Station
- Black Hole
- Random address
All random address created will default to the planet index 1 to help ensure there the address is valid
**Example:**
```golang
fmt.Println(nmslib.RndPortal())
fmt.Println(nmslib.RndPortal())
fmt.Println(nmslib.RndAtlas())
fmt.Println(nmslib.RndBH())
```
**Output:**
**Output examples:**
``10EFABDEA373``
``11EAB355FC8E``
## License
[MIT](COPYING)
``107AC0E190D1``
``10796D57AE15``
<hr>
## A Proud member of NMH Hub
### [![NMH Official Page](https://static.wikia.nocookie.net/nomanssky_gamepedia/images/5/5a/NMH_Banner_Hub.png/revision/latest/scale-to-width-down/85?cb=20201210044657)](https://nomanssky.fandom.com/wiki/No_Man%27s_High_Hub) [![Discord Server](https://img.shields.io/badge/Discord-Invite-blue?&logo=discord&logoColor=white)](https://discord.gg/mhRxf29hns)

View File

@@ -55,7 +55,7 @@ import (
func bindataRead(data []byte, name string) ([]byte, error) {
gz, err := gzip.NewReader(bytes.NewBuffer(data))
if err != nil {
return nil, fmt.Errorf("Read %q: %v", name, err)
return nil, fmt.Errorf("read %q: %v", name, err)
}
var buf bytes.Buffer
@@ -63,7 +63,7 @@ func bindataRead(data []byte, name string) ([]byte, error) {
clErr := gz.Close()
if err != nil {
return nil, fmt.Errorf("Read %q: %v", name, err)
return nil, fmt.Errorf("read %q: %v", name, err)
}
if clErr != nil {
return nil, err

View File

@@ -1,3 +1,8 @@
/*
Xainesworld Video: https://www.youtube.com/watch?v=xmZbkTahw4w
Fandom Wiki: https://nomanssky.fandom.com/wiki/Portal_address
*/
package nmslib
import (
@@ -7,18 +12,11 @@ import (
"strings"
)
/*
Xainesworld Video: https://www.youtube.com/watch?v=xmZbkTahw4w
Fandom Wiki: https://nomanssky.fandom.com/wiki/Portal_address
*/
/*
P2gc - Portal code to galactic coordinates
Requires 1 var and returns 1 var string
var p string
Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
Return var string
Galactic address (ex. 042F:0079:0D55:006A)
Requires 1 var and returns 1 var string and an error
var p string: Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
Returns var string: Galactic address (ex. 042F:0079:0D55:006A)
*/
func P2gc(p string) (gc string, err error) {
if len(p) == 12 { // Test if length of provided string is 12 chars long
@@ -27,19 +25,19 @@ func P2gc(p string) (gc string, err error) {
var coord [4]int64
coord[1], err = strconv.ParseInt(p[4:6], 16, 16) // Y coordinate
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [4:6]")
}
coord[2], err = strconv.ParseInt(p[6:9], 16, 16) // Z cooridnate
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [6:9]")
}
coord[3], err = strconv.ParseInt(p[9:12], 16, 16) // X coordinate
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [9:12]")
}
coord[0], err = strconv.ParseInt(p[1:4], 16, 16) // SSI (Star System Identifier)
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [1:4]")
}
// apply shifts to Handle the shape/boundaries of the galaxy
@@ -68,17 +66,17 @@ func P2gc(p string) (gc string, err error) {
/*
Gc2p - Galactic coordinates to portal code
Requires 1 string and 1 int returns a string and error
var gc string
Galactic address (ex. 042F:0079:0D55:006A)
var p int
Planet ID [1-6]
Return var string
Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
var gc string: Galactic address (ex. 042F:0079:0D55:006A)
var p int: Planet ID [1-6]
Returns portalcode string: Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
*/
func Gc2p(gc string, p int) (portalcode string, err error) {
// split and store string
// coords[0] == X; coords[1] == Y coords[2] == Z;
// coords[3] == SSI coords[4] == P
if len(gc) != 19 {
return "", errors.New("galatic code is the wrong length")
}
if p > 6 {
p = 1
}
@@ -91,26 +89,30 @@ func Gc2p(gc string, p int) (portalcode string, err error) {
var hexCoords [5]int64
hexCoords[0], err = strconv.ParseInt(coords[4], 16, 16) // P
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [4]")
}
hexCoords[1], err = strconv.ParseInt(coords[3], 16, 16) // SSI
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [3]")
}
hexCoords[2], err = strconv.ParseInt(coords[1], 16, 16) // Y
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [1]")
}
hexCoords[3], err = strconv.ParseInt(coords[2], 16, 16) // Z
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [2]")
}
hexCoords[4], err = strconv.ParseInt(coords[0], 16, 16) // X
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [0]")
}
// Apply shifts to Handle the shape/boundaries of the galaxy
/*Note:
[P][SSS][YY][ZZZ][XXX] len == 12
* SSS == SSI
*/
hexCoords[2] = hexCoords[2] + 0x81 // Y ->> shift
hexCoords[3] = hexCoords[3] + 0x801 // Z ->> shift
hexCoords[4] = hexCoords[4] + 0x801 // X ->> shift
@@ -122,6 +124,7 @@ func Gc2p(gc string, p int) (portalcode string, err error) {
}
// Assemble padded values as a string
portalcode = fmt.Sprintf("%00X%03X", hexCoords[0], hexCoords[1])
for n := 2; n < len(hexCoords); n++ {
if n == 2 {
@@ -130,5 +133,5 @@ func Gc2p(gc string, p int) (portalcode string, err error) {
portalcode = portalcode + fmt.Sprintf("%03X", hexCoords[n])
}
}
return portalcode, err // return formated string and error
return // return formated string and error
}

View File

@@ -1,110 +1,128 @@
package nmslib
import (
"errors"
"fmt"
"image/png"
"image"
"io/ioutil"
"os"
"strconv"
gim "github.com/ozankasikci/go-image-merge"
"github.com/fogleman/gg"
)
/*CreateBanner - Output PNG of Portal Glyphs
Requires 3 vars and returns 0 var, Outputs a PNG file
var portalex string
Portal Glyph hex string
var savename string
Output name of PNG file
Requires 3 vars and returns 1 err, Outputs a PNG file
var portalex string: Portal Glyph hex string
var savename string: Output name of PNG file
var opt int
00 sets horizontal banner in light mode
00 sets horizontal banner in light mode [ 00 || 0 ]
01 sets horizontal banner in dark mode [ 01 || 1 ]
10 sets vertical banner in light mode
01 sets horizontal banner in dark mode
11 sets vertical banner in dark mode
* note first of the 2 bits sets the layout, the second bit sets the glyph color
*/
func CreateBanner(portalhex string, savename string, opt int) {
var err error
func CreateBanner(portalhex string, savename string, opt int) (err error) {
out, err := GenRawBanner(portalhex, opt)
if err != nil {
return
}
gg.SavePNG(savename+".png", out)
//gg.SaveJPG(savename+".jpg", out, 50)
return
}
/*GenRawBanner - Returns image.Image of genorated image
Requires 2 vars and returns image.Image (raw image data) and an error
var portalex string: Portal Glyph hex string
var opt int
00 sets horizontal banner in light mode [ 00 || 0 ]
01 sets horizontal banner in dark mode [ 01 || 1 ]
10 sets vertical banner in light mode
11 sets vertical banner in dark mode
* note first of the 2 bits sets the layout, the second bit sets the glyph color
*/
func GenRawBanner(portalhex string, layout int) (portalbanner image.Image, err error) {
var GlyphHex [12]int64
var glyphImg [12]string
var mode string
var vert int
var horz int
var imgArray [12]image.Image
// Setup temp dir
tempdir, err := ioutil.TempDir("", "nmslib-")
if err != nil {
panic(err)
//Set light or dark mode glyphs
if layout == 00 || layout == 10 {
mode = "light"
} else if layout == 01 || layout == 11 {
mode = "dark"
} else {
// if layout is an invalid option (ie. not a 2 bit binary number default to classic mode/layout
layout = 0
mode = "light"
}
//defer os.RemoveAll(tempdir)
// verify len of portalhex
if len(portalhex) == 12 {
// get hex value from each digit in given string to an array of int64
// get hex value from each digit in given string and add it to an array of int64
for i := 0; i < len(portalhex); i++ {
GlyphHex[i], err = strconv.ParseInt(portalhex[i:int(i+1)], 16, 16)
if err != nil {
panic(err)
return nil, errors.New("string provided is not hexadecimal ([0-9][A-F])")
}
}
// set options
if opt == 00 { // set vertical rendering in light mode
vert, horz = 12, 1
mode = "light"
} else if opt == 01 { // set vertival in dark mode
vert, horz = 12, 1
mode = "dark"
} else if opt == 11 { // set horizontal rendering in dark mode
vert, horz = 1, 12
mode = "dark"
} else { // set horizontal rendering in light mode (classic/default)
vert, horz = 1, 12
mode = "light"
}
// assign image location of its glyph hex value to an array of strings
// assign image location of its glyph-hex value to an array of strings
for j := 0; j < len(glyphImg); j++ {
glyphImg[j] = fmt.Sprintf("assets/glyphs/%s/PORTALSYMBOL.%X.png", mode, GlyphHex[j])
}
// pull images need from glyph.go and saved them to ./glyphs/
// pull images need from assets.go and saved them to the temp directory
for k := 0; k < len(glyphImg); k++ {
data, err := Asset(glyphImg[k])
if err != nil {
panic(err)
return nil, errors.New("can not load images from assets: " + glyphImg[k])
}
_, err2 := os.Stat(tempdir + "/assets/glyphs/" + mode + "/")
if os.IsNotExist(err2) {
errDir := os.MkdirAll(tempdir+"/assets/glyphs/"+mode, 0755)
if errDir != nil {
panic(errDir)
}
err = ioutil.WriteFile(NmsTemp+"/"+glyphImg[k], []byte(data), 0644)
if err != nil {
return nil, errors.New("can not write file to temp directory")
}
// fmt.Println(tempdir + "/" + glyphImg[k]) // for debugging only
err = ioutil.WriteFile(tempdir+"/"+glyphImg[k], []byte(data), 0644)
}
// load images for processing using github.com/ozankasikci/go-image-merge
grids := []*gim.Grid{
{ImageFilePath: tempdir + "/" + glyphImg[0]}, {ImageFilePath: tempdir + "/" + glyphImg[1]},
{ImageFilePath: tempdir + "/" + glyphImg[2]}, {ImageFilePath: tempdir + "/" + glyphImg[3]},
{ImageFilePath: tempdir + "/" + glyphImg[4]}, {ImageFilePath: tempdir + "/" + glyphImg[5]},
{ImageFilePath: tempdir + "/" + glyphImg[6]}, {ImageFilePath: tempdir + "/" + glyphImg[7]},
{ImageFilePath: tempdir + "/" + glyphImg[8]}, {ImageFilePath: tempdir + "/" + glyphImg[9]},
{ImageFilePath: tempdir + "/" + glyphImg[10]}, {ImageFilePath: tempdir + "/" + glyphImg[11]},
//Load/open images needed
for iter := 0; iter < 12; iter++ {
imgArray[iter], err = gg.LoadPNG(NmsTemp + "/" + glyphImg[iter])
if err != nil {
return nil, errors.New("can not read glyph " + glyphImg[iter])
}
}
// create new image from grids
rgba, err := gim.New(grids, vert, horz).Merge()
if err != nil {
panic(err)
//begin concatenating images
// get image size of first glyph, all glyphs have the same X && Y dimension so we only need to measure one.
imgDim := imgArray[0].Bounds().Size()
//Set Layout
//classic horizontal layout
if layout == 01 || layout == 00 {
imgWidth := imgDim.X * 12
imgHeight := imgDim.Y
concat := gg.NewContext(imgWidth, imgHeight)
for a := 0; a < 12; a++ {
concat.DrawImage(imgArray[a], imgDim.X*a, 0)
}
return concat.Image(), nil
}
// save the output to png
file, err := os.Create(savename)
err = png.Encode(file, rgba)
if err != nil {
fmt.Println(err)
//Vertical layout
if layout == 10 || layout == 11 {
imgWidth := imgDim.X
imgHeight := imgDim.Y * 12
concat := gg.NewContext(imgWidth, imgHeight)
for a := 0; a < 12; a++ {
concat.DrawImage(imgArray[a], 0, imgDim.Y*a)
}
return concat.Image(), nil
}
} else {
return nil, errors.New("portalcode must be exactly 12 chars")
}
return
}

7
go.mod
View File

@@ -1,8 +1,9 @@
module nmslib
module gitlab.com/Raum0x2A/nmslib
go 1.16
require (
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
github.com/ozankasikci/go-image-merge v0.2.2
github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e // indirect
)

11
go.sum
View File

@@ -1,4 +1,7 @@
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/ozankasikci/go-image-merge v0.2.2 h1:K370BLLTIsamwjAeViiPntf7GiG3h9pXzDmxXCbN8/0=
github.com/ozankasikci/go-image-merge v0.2.2/go.mod h1:NQ2aN0b21buFx3p+5x4dZrKuPSLh2uBukK7F30BrYTo=
github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b h1:gqOBIAmkc/ZxXzFrM4wTub7tD0xYaOsaOQ5wOA74lJQ=
github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e h1:PzJMNfFQx+QO9hrC1GwZ4BoPGeNGhfeQEgcQFArEjPk=
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

71
init.go Normal file
View File

@@ -0,0 +1,71 @@
package nmslib
import (
"errors"
"io/ioutil"
"os"
)
/*NmsTemp - Global string variable
Location of instance temporary directory
Dir Structure:
- NmsTemp
-
*/
var NmsTemp string
/*Initialize temporary directory
create a temp dir and save location to `NmsTemp` string
*/
func init() {
// create temp dir
temploc, err := ioutil.TempDir("", "nmslib-")
if err != nil {
panic(err)
}
NmsTemp = temploc
//Create directory structure
err = os.Mkdir(NmsTemp+"/assets", 0755)
if err != nil {
panic(errors.New("failed to create temporary folder"))
}
err = os.Mkdir(NmsTemp+"/assets/lang", 0755)
if err != nil {
panic(errors.New("failed to create temporary folder"))
}
err = os.Mkdir(NmsTemp+"/assets/glyphs", 0755)
if err != nil {
panic(errors.New("failed to create temporary folder"))
}
err = os.Mkdir(NmsTemp+"/assets/glyphs/dark", 0755)
if err != nil {
panic(errors.New("failed to create temporary folder"))
}
err = os.Mkdir(NmsTemp+"/assets/glyphs/light", 0755)
if err != nil {
panic(errors.New("failed to create temporary folder"))
}
//Write language files to temp directory
fileloc := [4]string{"atlas-lang.csv", "gek-lang.csv", "korvax-lang.csv", "vykeen-lang.csv"}
for x := 0; x < 4; x++ {
data, err := Asset("assets/lang/" + fileloc[x])
if err != nil {
panic(errors.New("can not load: " + fileloc[x]))
}
err = ioutil.WriteFile(NmsTemp+"/assets/lang/"+fileloc[x], []byte(data), 0644)
if err != nil {
panic(errors.New("can not write " + fileloc[x] + " to temp dir"))
}
}
}
/*CleanUp removes temporary directory an it's contents
this is intended to be called in a defer statement in func main
takes no input
*/
func CleanUp() {
os.RemoveAll(NmsTemp)
}

11
init_test.go Normal file
View File

@@ -0,0 +1,11 @@
package nmslib
import (
"fmt"
"testing"
)
func TestInit(t *testing.T) {
fmt.Printf("\nTesting init:\n")
fmt.Printf("Temporary directory: %s\n\n", NmsTemp)
}

278
lang.go
View File

@@ -2,206 +2,140 @@ package nmslib
import (
"encoding/csv"
"fmt"
"io/ioutil"
"os"
"strings"
)
/*
Translate words
/*Translate Game languages and english
Translate.Lang sets source language for translations
options are:
korvax
gek
vykeen
atlas
english
*/
type Translate struct {
Word string
Lang string
}
// trans - set up structure of a word iteration
type trans0 struct {
english string // english word
word string // no caps word
capword string // Capitalized word
acpword string // ALL CAPITALIZED WORD
}
/*
Kor2Eng translate korvax word to english word
/*Translate source language to english
Translate any NMS language (ie. Korvax) to english
*/
func (t Translate) Kor2Eng() (returnstring string) {
csvlines := openCSV("korvax-lang.csv")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
func (t Translate) ToEng(word string) (translation string) {
//return translate2english(word, langFile(t.Lang))
return Translator(word, t.Lang, "english")
}
/*
Eng2Kor translate english word to korvax word
/*Translate source language to Korvax
Translate any NMS language or english (ie. Gek) to Korvax
*/
func (t Translate) Eng2Kor() (returnstring string) {
csvlines := openCSV("korvax-lang.csv")
for range csvlines {
returnstring = (toNMS(t, csvlines))
}
return
func (t Translate) ToKorvax(word string) (translation string) {
return Translator(word, t.Lang, "korvax")
}
/*
Gek2Eng translate Gek word to english word
/*Translate source language to Vy'Keen
Translate any NMS language or english (ie. Atlas) to Vy'Keen
*/
func (t Translate) Gek2Eng() (returnstring string) {
csvlines := openCSV("gek-lang.csv")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
func (t Translate) ToVykeen(word string) (translation string) {
return Translator(word, t.Lang, "vykeen")
}
/*
Eng2Gek translate english word to Gek word
/*Translate source language to Gek
Translate any NMS language or english (ie. Vy'Keen) to Gek
*/
func (t Translate) Eng2Gek() (returnstring string) {
csvlines := openCSV("gek-lang.csv")
for range csvlines {
returnstring = (toNMS(t, csvlines))
}
return
func (t Translate) ToGek(word string) (translation string) {
return Translator(word, t.Lang, "Gek")
}
/*
Vyk2Eng translate vykeen word to english word
/*Translate source language to Atlas
Translate any NMS language or english (ie. Korvax) to Atlas
*/
func (t Translate) Vyk2Eng() (returnstring string) {
csvlines := openCSV("vykeen-lang.csv")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
func (t Translate) ToAtlas(word string) (translation string) {
return Translator(word, t.Lang, "atlas")
}
/*
Eng2Vyk translate english word to vykeen word
*/
func (t Translate) Eng2Vyk() (returnstring string) {
csvlines := openCSV("vykeen-lang.csv")
for range csvlines {
returnstring = (toNMS(t, csvlines))
}
return
}
/*
Atl2Eng translate Atlas word to english word
*/
func (t Translate) Atl2Eng() (returnstring string) {
csvlines := openCSV("atlas-lang.csv")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
}
/*
Eng2Atl translate english word to Atlas word
*/
func (t Translate) Eng2Atl() (returnstring string) {
csvlines := openCSV("atlas-lang.csv")
for range csvlines {
returnstring = (toNMS(t, csvlines))
}
return
}
func toEng(t Translate, csvlines [][]string) string {
returnstring := "*\\Kzzzzzzt\\*" // word not found default
for _, line := range csvlines {
lang := trans0{
english: strings.ToLower(line[0]),
word: strings.ToLower(line[1]),
capword: strings.ToLower(line[2]),
acpword: strings.ToLower(line[3]),
}
// check translate struct for value
if strings.ToLower(t.Word) == lang.word {
returnstring = lang.english
} else if strings.ToLower(t.Word) == lang.capword {
returnstring = strings.Title(strings.ToLower(lang.english))
} else if strings.ToLower(t.Word) == lang.acpword {
returnstring = strings.ToUpper(lang.english)
}
}
return returnstring
}
func toNMS(t Translate, csvlines [][]string) string {
returnstring := "*\\Kzzzzzzt\\*" // word not found default
for _, line := range csvlines {
lang := trans0{
english: line[0],
word: line[1],
capword: line[2],
acpword: line[3],
}
if t.Word == lang.english {
if lang.word != "" {
returnstring = lang.word
}
}
if t.Word == strings.Title(strings.ToLower(lang.english)) {
if lang.capword != "" {
returnstring = strings.Title(strings.ToLower(lang.capword))
}
}
if t.Word == strings.ToUpper(lang.english) {
if lang.acpword != "" {
returnstring = strings.ToUpper(lang.acpword)
}
}
}
return returnstring
}
/*
func openCSV(lagcsv string) [][]string {
csvFile, err := os.Open("./assets/lang/" + lagcsv)
if err != nil {
fmt.Println(err)
}
defer csvFile.Close() // close language file when finished
// read csv file from memory
csvlines, err := csv.NewReader(csvFile).ReadAll()
if err != nil {
fmt.Println(err)
}
return csvlines
*/
func openCSV(lagcsv string) [][]string {
// create temp dir
tempdir, err := ioutil.TempDir("", "nmslib-")
// read language files
func langFile(lang string) [][]string {
filepath := NmsTemp + "/assets/lang/" + lang + "-lang.csv"
csvFile, err := os.Open(filepath)
if err != nil {
panic(err)
}
defer os.RemoveAll(tempdir) // Clean up temp files
defer csvFile.Close()
// extract language file from resources.go
data, err := Asset("assets/lang/" + lagcsv)
lines, err := csv.NewReader(csvFile).ReadAll()
if err != nil {
panic(err)
}
// wirte extracted data to temp dir
err = ioutil.WriteFile(tempdir+"/"+lagcsv, []byte(data), 0644)
csvFile, err := os.Open(tempdir + "/" + lagcsv)
if err != nil {
fmt.Println(err)
}
defer csvFile.Close() // close language file when finished
// read csv file from memory
csvlines, err := csv.NewReader(csvFile).ReadAll()
if err != nil {
fmt.Println(err)
}
return csvlines
return lines
}
/*Translate any in game language to another including english (ie. Korvax to Gek)
Translating from english to a game language will alway default to all lower case for now
*/
func Translator(word string, source string, target string) string {
var sourcekey [4]string
var targetkey [4]string
var dmy string
var rt string
rt = "*\\Kzzzzzzt\\*"
if source == "english" {
dmy = target
} else {
dmy = source
}
for _, line := range langFile(dmy) {
for _, trans := range line {
if trans == word {
sourcekey[0] = line[0]
sourcekey[1] = line[1]
sourcekey[2] = line[2]
sourcekey[3] = line[3]
}
}
if target != "english" {
for _, line := range langFile(target) {
if strings.EqualFold(line[0], sourcekey[0]) {
targetkey[0] = line[0]
targetkey[1] = line[1]
targetkey[2] = line[2]
targetkey[3] = line[3]
}
}
if strings.EqualFold(word, sourcekey[0]) {
if targetkey[0] != "" {
rt = targetkey[0]
}
} else if strings.EqualFold(word, sourcekey[1]) {
if targetkey[1] != "" {
rt = targetkey[1]
}
} else if strings.EqualFold(word, sourcekey[2]) {
if targetkey[2] != "" {
rt = targetkey[2]
}
} else if strings.EqualFold(word, sourcekey[3]) {
if targetkey[3] != "" {
rt = targetkey[3]
}
}
if source == "english" {
rt = targetkey[1]
}
} else {
if strings.EqualFold(word, sourcekey[0]) {
rt = sourcekey[0]
} else if strings.EqualFold(word, sourcekey[1]) {
rt = strings.ToLower(sourcekey[0])
} else if strings.EqualFold(word, sourcekey[2]) {
rt = strings.Title(sourcekey[0])
} else if strings.EqualFold(word, sourcekey[3]) {
rt = strings.ToUpper(sourcekey[0])
}
}
}
return rt
}

30
nmslib-convert_test.go Normal file
View File

@@ -0,0 +1,30 @@
package nmslib
import (
"fmt"
"testing"
)
func TestPortal2Galactic(t *testing.T) {
want, err := P2gc("21F2F8EDB94D")
if err != nil {
fmt.Println(err)
}
if want != "014C:0077:06DA:01F2" {
t.Errorf("Testing P2gc(\"21F2F8EDB94D\"): got %q, want: 014C:0077:06DA:01F2.\n", want)
} else {
fmt.Printf("Testing P2gc(\"21F2F8EDB94D\"): got: %q, want: 014C:0077:06DA:01F2.\n", want)
}
}
func TestGalactic2portal(t *testing.T) {
want, err := Gc2p("014C:0077:06DA:01F2", 2)
if err != nil {
fmt.Println(err)
}
if want != "21F2F8EDB94D" {
t.Errorf("Testing Gc2p(\"014C:0077:06DA:01F2\"): got %q, want: 21F2F8EDB94D.\n", want)
} else {
fmt.Printf("Testing Gc2p(\"014C:0077:06DA:01F2\"): got: %q, want: 21F2F8EDB94D.\n", want)
}
}

View File

@@ -0,0 +1,21 @@
package nmslib
import (
"fmt"
"testing"
)
func TestCreateBanner(t *testing.T) {
fmt.Printf("\nTesting CreateBanner: ")
rp := "21F2F8EDB94D"
//rp := RndPortal()
fileout := "./test"
err := CreateBanner(rp, fileout, 0)
if err != nil {
fmt.Println(err)
}
fmt.Printf("Portal address `%s` rendered as `%s`\n", rp, fileout)
}

21
nmslib-rpcg_test.go Normal file
View File

@@ -0,0 +1,21 @@
package nmslib
import (
"fmt"
"testing"
)
func TestRndPortal(t *testing.T) {
fmt.Printf("\nRandom Portal Code: ")
fmt.Println(RndPortal())
}
func TestRndAtlas(t *testing.T) {
fmt.Printf("semi-Random Atlas Code: ")
fmt.Println(RndAtlas())
}
func TestRndBH(t *testing.T) {
fmt.Printf("semi-Random black hole Code: ")
fmt.Println(RndBH())
}

36
nmslib-translate_test.go Normal file
View File

@@ -0,0 +1,36 @@
package nmslib
import (
"fmt"
"testing"
)
func TestTranslate(t *testing.T) {
kor2eng := Translate{Lang: "korvax"}
if kor2eng.ToEng("Alinichel") != "Emergency" {
t.Errorf("\nTesting Translate{Lang: \"korvax\"}.ToEng(\"Alinichel\"): got %q, want: %q.\n", kor2eng.ToEng("Alinichel"), "Emergency")
} else {
fmt.Printf("\nTesting Translate{Lang: \"korvax\"}.ToEng(\"Alinichel\"): got %q, want: %q.\n", kor2eng.ToEng("Alinichel"), "Emergency")
}
vyk2eng := Translate{"vykeen"}
if vyk2eng.ToEng("Aqo") != "Foes" {
t.Errorf("Testing Translate{Lang: \"vykeen\"}.ToEng(\"Aqo\"): got %q, want: %q.\n", vyk2eng.ToEng("Aqo"), "Foes")
} else {
fmt.Printf("Testing Translate{Lang: \"vykeen\"}.ToEng(\"Aqo\"): got %q, want: %q.\n", vyk2eng.ToEng("Aqo"), "Foes")
}
engWord := Translate{"english"}
if engWord.ToKorvax("learn") != "achi" {
t.Errorf("Testing Translate{Lang: \"english\"}.ToKor(\"learn\"): got %q, want: %q.\n", engWord.ToKorvax("learn"), "achi")
} else {
fmt.Printf("Testing Translate{Lang: \"english\"}.ToKor(\"learn\"): got %q, want: %q.\n", engWord.ToKorvax("learn"), "achi")
}
fmt.Println("Blind Test: " + Translate{"gek"}.ToAtlas("baturk")) // word does not exist in Atlas lang
fmt.Println("Blind Test: " + Translate{"gek"}.ToAtlas("Tor")) // word exists
fmt.Println("Running CleanUp()")
CleanUp()
fmt.Printf("\nTesting complete.\nStatus: ")
}

View File

@@ -1,90 +0,0 @@
package nmslib
import (
"fmt"
"testing"
)
func TestRndPortal(t *testing.T) {
fmt.Printf("\nRandom Portal Code: ")
fmt.Println(RndPortal())
}
func TestCreateBanner(t *testing.T) {
fmt.Printf("\nTesting CreateBanner: ")
CreateBanner(RndPortal(), "/tmp/Test.png", 11)
fmt.Printf("Random Portal address rendered as `/tmp/Test.png`\n\n")
}
func TestPortal2Galactic(t *testing.T) {
want, err := P2gc("006afa556c30")
if err != nil {
panic(err)
}
if want != "042F:0079:0D55:006A" {
t.Errorf("Testing P2gc(\"006afa556c30\"): got %q, want: %q.\n", want, "042F:0079:0D55:006A")
} else {
fmt.Printf("Testing P2gc(\"006afa556c30\"): got: %q, want: %q.\n", want, "042F:0079:0D55:006A")
}
want, err = P2gc("41EDF9554C2F")
if err != nil {
panic(err)
}
if want != "042E:0078:0D53:01ED" {
t.Errorf("Testing P2gc(\"41EDF9554C2F\"): got %q, want: %q.\n", want, "042E:0078:0D53:01ED")
} else {
fmt.Printf("Testing P2gc(\"41EDF9554C2F\"): got: %q, want: %q.\n", want, "042E:0078:0D53:01ED")
}
}
func TestGalactic2portal(t *testing.T) {
want, err := Gc2p("042F:0079:0D55:006A", 1)
if err != nil {
panic(err)
}
if want != "106AFA556C30" {
t.Errorf("\nTesting Gc2p(\"042F:0079:0D55:006A\"): got %q, want: %q.\n", want, "106AFA556C30")
} else {
fmt.Printf("\nTesting Gc2p(\"042F:0079:0D55:006A\"): got: %q, want: %q.\n", want, "106AFA556C30")
}
want, err = Gc2p("042E:0078:0D53:01ED", 4)
if err != nil {
panic(err)
}
if want != "41EDF9554C2F" {
t.Errorf("Testing Gc2p(\"042E:0078:0D53:01ED\"): got %q, want: %q.\n", want, "41EDF9554C2F")
} else {
fmt.Printf("Testing Gc2p(\"042E:0078:0D53:01ED\"): got: %q, want: %q.\n", want, "41EDF9554C2F")
}
}
func TestTranslate(t *testing.T) {
want := Translate{"Paka"}
if want.Atl2Eng() != "Awake" {
t.Errorf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake")
} else {
fmt.Printf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake")
}
want = Translate{"hofsos"}
if want.Gek2Eng() != "answer" {
t.Errorf("Testing Translate{\"hofsos\"}.Gek2Eng(): got %q, want: %q.\n", want.Gek2Eng(), "answer")
} else {
fmt.Printf("Testing Translate{\"hofsos\"}.Gek2Eng(): got %q, want: %q.\n", want.Gek2Eng(), "answer")
}
want = Translate{"Aqo"}
if want.Vyk2Eng() != "Foes" {
t.Errorf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes")
} else {
fmt.Printf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes")
}
want = Translate{"Alinichel"}
if want.Kor2Eng() != "Emergency" {
t.Errorf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency")
} else {
fmt.Printf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency")
}
fmt.Printf("\nTesting complete.\nStatus: ")
}

67
rpcg.go
View File

@@ -1,11 +1,3 @@
package nmslib
import (
"fmt"
"math/rand"
"time"
)
/*
[P][SSS][YY][ZZZ][XXX] (P = Planet Index / S = Star System Index / Y = Height / Z = Width / X = Length)
@@ -23,6 +15,19 @@ import (
*/
package nmslib
import (
"fmt"
"math/rand"
"time"
)
/*
RndPortal - Random Portalcode generator
Requires no input required and returns a string
*/
func RndPortal() (final string) {
rand.Seed(time.Now().UnixNano())
min := 0x1
@@ -39,3 +44,49 @@ func RndPortal() (final string) {
return
}
/*RndAtlas genorates a semi-random atlas code
Requires no input and returns a string
This is not a true random atlas genorator. Insted this will create a Planet id of 1, Solar System Index of 0x07A and random Y, Z, X
SSI 0x07A always has an Atlas Interface.
REF: https://nomanssky.fandom.com/wiki/Portal_address#Solar_System_Index https://nomanssky.fandom.com/wiki/Star_system#Classification
*/
func RndAtlas() (final string) {
rand.Seed(time.Now().UnixNano())
min := 0x1
ymax := 0xFF
xzmax := 0xFFF
x := rand.Intn(xzmax-min+1) + min
z := rand.Intn(xzmax-min+1) + min
y := rand.Intn(ymax-min+1) + min
final = fmt.Sprintf("%00X%03X%02X%03X%03X", 1, 0x07A, y, z, x)
return
}
/*RndBH genorates a semi-random atlas code
Requires no input required and returns a string
This is not a true random atlas genorator. Insted this will create a Planet id of 1, Solar System Index of 0x079 and random Y, Z, X
SSI 0x079 always has a black hole.
REF: https://nomanssky.fandom.com/wiki/Portal_address#Solar_System_Index https://nomanssky.fandom.com/wiki/Star_system#Classification
*/
func RndBH() (final string) {
rand.Seed(time.Now().UnixNano())
min := 0x1
ymax := 0xFF
xzmax := 0xFFF
x := rand.Intn(xzmax-min+1) + min
z := rand.Intn(xzmax-min+1) + min
y := rand.Intn(ymax-min+1) + min
final = fmt.Sprintf("%00X%03X%02X%03X%03X", 1, 0x079, y, z, x)
return
}