31 Commits

Author SHA1 Message Date
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 565 additions and 416 deletions

4
.gitignore vendored
View File

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

View File

@@ -6,4 +6,6 @@ test:
image: golang:1.16.3 image: golang:1.16.3
script: script:
- go test - go test
only:
- master
- develop

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

121
README.md
View File

@@ -1,8 +1,10 @@
# NMSlib # NMSlib
**master Branch** : ![](https://gitlab.com/Raum0x2A/nmslib/badges/master/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)
**develop Branch** : ![](https://gitlab.com/Raum0x2A/nmslib/badges/develop/pipeline.svg) [![](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.0-blue?style=flat&logo=go)](https://gitlab.com/Raum0x2A/nmslib/-/releases/v1.0.0)
NMSlib is a GoLang package for dealing with converting Galactic coordinates to Portal codes and vice versa. NMSlib is a GoLang package for dealing with converting Galactic coordinates to Portal codes and vice versa.
@@ -13,13 +15,13 @@ NMSlib also translates in game languages (Korvax, Gek Vy'Keen and Atlas) to engl
To install this module use `go get` To install this module use `go get`
```bash ```golang
go get -u gitlab.com/Raum0x2A/nmslib go get -u gitlab.com/Raum0x2A/nmslib
``` ```
## Usage ## Usage
**Example:** ### Example:
```golang ```golang
package main package main
@@ -32,25 +34,32 @@ import (
func main() { func main() {
portalcode := "21F2F8EDB94D" portalcode := "21F2F8EDB94D"
tstvar, err := nmslib.P2gc(portalcode) galacticCoords, err := nmslib.P2gc(portalcode)
if err != nil { if err != nil {
panic(err) 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) g2p, err := nmslib.Gc2p("014C:0077:06DA:01F2", 2)
nmslib.CreateBanner(RndPortal(), "Random.png", 0) if err != nil {
panic(err)
}
fmt.Printf("Input:\t014C:0077:06DA:01F2\nOutput:\t%s\n", g2p)
fmt.Println(nmslib.Translate{"KIHTYOMOLES"}.Kor2Eng()) _ := nmslib.CreateBanner(portalcode, "./NMH-BlueDream.png", 0)
korvax := nmslib.Translate{"Contraband"} _ := nmslib.CreateBanner(nmslib.RndPortal(), "./Random.png", 0)
fmt.Println(nmslib.korvax.Eng2Kor())
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 with CreateBanner()
This function takes 3 parameters: This function takes 3 parameters and reurns an error
* portalcode: 12 char hex string of portal location * portalcode: 12 char hex string of portal location
* savename: Save location and name * savename: Save location and name
@@ -63,27 +72,32 @@ This function takes 3 parameters:
**Example:** **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 ```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 Vertical layout for a random address
```golang ```golang
nmslib.CreateBanner(nmslib.RndPortal(), "ranportal.png", 11) err := nmslib.CreateBanner(nmslib.RndPortal(), "ranportal.png", 11)
if err != nil {
panic(err)
}
``` ```
![](ranportal_scaled.png) ![](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 with P2gc()
@@ -94,7 +108,7 @@ This function only takes 1 parameter and returns a string and error
**Example:** **Example:**
```golang ```golang
ga, _ := nmslib.P3gc("21F2F8EDB94D") ga, _ := nmslib.P2gc("21F2F8EDB94D")
fmt.Println(ga) fmt.Println(ga)
``` ```
@@ -104,14 +118,15 @@ Output:
### Converting Galactic coordinates to Portal codes with Gc2p() ### Converting Galactic coordinates to Portal codes with Gc2p()
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 * galacticaddress: 16 char 4 block hex address
* Planet ID [1-6]
**Example:** **Example:**
```golang ```golang
pc, _ := nmslib.P3gc("014C:0077:06DA:01F2") pc, _ := nmslib.Gc2p("014C:0077:06DA:01F2", 2)
fmt.Println(pc) fmt.Println(pc)
``` ```
@@ -134,15 +149,17 @@ This function takes only 1 parameter and returns a string
* Word: Any known Atlas word (ex. Paka) * Word: Any known Atlas word (ex. Paka)
_note: Translating to english will **always** result in the lowercase equivilent word_
**Example:** **Example:**
```golang ```golang
fmt.Println(nmslib.Translate{"Paka"}.Atl2Eng()) fmt.Println(nmslib.Translate{Lang: "atlas"}.ToEng("Paka"))
``` ```
Output: Output:
``Awake`` ``awake``
### Translate English to Korvax with Eng2Korvax() ### Translate English to Korvax with Eng2Korvax()
@@ -153,8 +170,8 @@ This function takes only 1 parameter and returns a string
**Example:** **Example:**
```golang ```golang
korvax := nmslib.Translate{"Contraband"} korvax := nmslib.Translate{"english"}
fmt.Println(korvax.Eng2Kor()) fmt.Println(korvax.ToKorvax("Contraband"))
``` ```
Output: Output:
@@ -164,38 +181,54 @@ Output:
### Language commands ### Language commands
Gek: - ``Translate{Lang: ``string``}.ToEng(``string``)``
- ``Translate{string}.Gek2Eng()`` - ``Translate{Lang: ``string``}.ToKorvax(``string``)``
- ``Translate{string}.Eng2Gek()`` - ``Translate{Lang: ``string``}.ToGek(``string``)``
- ``Translate{Lang: ``string``}.ToVykeen(``string``)``
- ``Translate{Lang: ``string``}.ToAtlat(``string``)``
Korvax: #### Possible Lang string options
- ``Translate{string}.Kor2Eng()``
- ``Translate{string}.Eng2Kor()``
Vy'keen: - ``"english"``
- ``Translate{string}.Vyk2Eng()`` - ``"korvax"``
- ``Translate{string}.Eng2Vyk()`` - ``"gek"``
- ``"vykeen"``
- ``"atlas"``
Atlas:
- ``Translate{string}.Atl2Eng()``
- ``Translate{string}.Eng2Atl()``
## Random Portal address ## 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:** **Example:**
```golang ```golang
fmt.Println(nmslib.RndPortal()) fmt.Println(nmslib.RndPortal())
fmt.Println(nmslib.RndPortal()) fmt.Println(nmslib.RndPortal())
fmt.Println(nmslib.RndAtlas())
fmt.Println(nmslib.RndBH())
``` ```
**Output:** **Output examples:**
``10EFABDEA373`` ``10EFABDEA373``
``11EAB355FC8E`` ``11EAB355FC8E``
## License ``107AC0E190D1``
[MIT](COPYING)
``10796D57AE15``
<hr>
## A Proud member of NMH Hub
### [![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) { func bindataRead(data []byte, name string) ([]byte, error) {
gz, err := gzip.NewReader(bytes.NewBuffer(data)) gz, err := gzip.NewReader(bytes.NewBuffer(data))
if err != nil { 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 var buf bytes.Buffer
@@ -63,7 +63,7 @@ func bindataRead(data []byte, name string) ([]byte, error) {
clErr := gz.Close() clErr := gz.Close()
if err != nil { if err != nil {
return nil, fmt.Errorf("Read %q: %v", name, err) return nil, fmt.Errorf("read %q: %v", name, err)
} }
if clErr != nil { if clErr != nil {
return nil, err 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 package nmslib
import ( import (
@@ -7,18 +12,11 @@ import (
"strings" "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 P2gc - Portal code to galactic coordinates
Requires 1 var and returns 1 var string Requires 1 var and returns 1 var string and an error
var p string var p string: Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
Portal Glyph hex string 12 chars in len (ex. 006afa556c30) Returns var string: Galactic address (ex. 042F:0079:0D55:006A)
Return var string
Galactic address (ex. 042F:0079:0D55:006A)
*/ */
func P2gc(p string) (gc string, err error) { func P2gc(p string) (gc string, err error) {
if len(p) == 12 { // Test if length of provided string is 12 chars long 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 var coord [4]int64
coord[1], err = strconv.ParseInt(p[4:6], 16, 16) // Y coordinate coord[1], err = strconv.ParseInt(p[4:6], 16, 16) // Y coordinate
if err != nil { 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 coord[2], err = strconv.ParseInt(p[6:9], 16, 16) // Z cooridnate
if err != nil { 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 coord[3], err = strconv.ParseInt(p[9:12], 16, 16) // X coordinate
if err != nil { 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) coord[0], err = strconv.ParseInt(p[1:4], 16, 16) // SSI (Star System Identifier)
if err != nil { 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 // 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 Gc2p - Galactic coordinates to portal code
Requires 1 string and 1 int returns a string and error Requires 1 string and 1 int returns a string and error
var gc string var gc string: Galactic address (ex. 042F:0079:0D55:006A)
Galactic address (ex. 042F:0079:0D55:006A) var p int: Planet ID [1-6]
var p int Returns portalcode string: Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
Planet ID [1-6]
Return var string
Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
*/ */
func Gc2p(gc string, p int) (portalcode string, err error) { func Gc2p(gc string, p int) (portalcode string, err error) {
// split and store string // split and store string
// coords[0] == X; coords[1] == Y coords[2] == Z; // coords[0] == X; coords[1] == Y coords[2] == Z;
// coords[3] == SSI coords[4] == P // coords[3] == SSI coords[4] == P
if len(gc) != 19 {
return "", errors.New("galatic code is the wrong length")
}
if p > 6 { if p > 6 {
p = 1 p = 1
} }
@@ -91,26 +89,30 @@ func Gc2p(gc string, p int) (portalcode string, err error) {
var hexCoords [5]int64 var hexCoords [5]int64
hexCoords[0], err = strconv.ParseInt(coords[4], 16, 16) // P hexCoords[0], err = strconv.ParseInt(coords[4], 16, 16) // P
if err != nil { if err != nil {
panic(err) return "", errors.New("error parsing intergers from string: [4]")
} }
hexCoords[1], err = strconv.ParseInt(coords[3], 16, 16) // SSI hexCoords[1], err = strconv.ParseInt(coords[3], 16, 16) // SSI
if err != nil { if err != nil {
panic(err) return "", errors.New("error parsing intergers from string: [3]")
} }
hexCoords[2], err = strconv.ParseInt(coords[1], 16, 16) // Y hexCoords[2], err = strconv.ParseInt(coords[1], 16, 16) // Y
if err != nil { if err != nil {
panic(err) return "", errors.New("error parsing intergers from string: [1]")
} }
hexCoords[3], err = strconv.ParseInt(coords[2], 16, 16) // Z hexCoords[3], err = strconv.ParseInt(coords[2], 16, 16) // Z
if err != nil { if err != nil {
panic(err) return "", errors.New("error parsing intergers from string: [2]")
} }
hexCoords[4], err = strconv.ParseInt(coords[0], 16, 16) // X hexCoords[4], err = strconv.ParseInt(coords[0], 16, 16) // X
if err != nil { if err != nil {
panic(err) return "", errors.New("error parsing intergers from string: [0]")
} }
// Apply shifts to Handle the shape/boundaries of the galaxy // 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[2] = hexCoords[2] + 0x81 // Y ->> shift
hexCoords[3] = hexCoords[3] + 0x801 // Z ->> shift hexCoords[3] = hexCoords[3] + 0x801 // Z ->> shift
hexCoords[4] = hexCoords[4] + 0x801 // X ->> 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 // Assemble padded values as a string
portalcode = fmt.Sprintf("%00X%03X", hexCoords[0], hexCoords[1]) portalcode = fmt.Sprintf("%00X%03X", hexCoords[0], hexCoords[1])
for n := 2; n < len(hexCoords); n++ { for n := 2; n < len(hexCoords); n++ {
if n == 2 { if n == 2 {
@@ -130,5 +133,5 @@ func Gc2p(gc string, p int) (portalcode string, err error) {
portalcode = portalcode + fmt.Sprintf("%03X", hexCoords[n]) 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 package nmslib
import ( import (
"errors"
"fmt" "fmt"
"image/png" "image"
"io/ioutil" "io/ioutil"
"os"
"strconv" "strconv"
gim "github.com/ozankasikci/go-image-merge" "github.com/fogleman/gg"
) )
/*CreateBanner - Output PNG of Portal Glyphs /*CreateBanner - Output PNG of Portal Glyphs
Requires 3 vars and returns 0 var, Outputs a PNG file Requires 3 vars and returns 1 err, Outputs a PNG file
var portalex string var portalex string: Portal Glyph hex string
Portal Glyph hex string var savename string: Output name of PNG file
var savename string
Output name of PNG file
var opt int 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 10 sets vertical banner in light mode
01 sets horizontal banner in dark mode
11 sets vertical 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) { func CreateBanner(portalhex string, savename string, opt int) (err error) {
var 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 GlyphHex [12]int64
var glyphImg [12]string var glyphImg [12]string
var mode string var mode string
var vert int var imgArray [12]image.Image
var horz int
// Setup temp dir //Set light or dark mode glyphs
tempdir, err := ioutil.TempDir("", "nmslib-") if layout == 00 || layout == 10 {
if err != nil { mode = "light"
panic(err) } 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 // verify len of portalhex
if len(portalhex) == 12 { 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++ { for i := 0; i < len(portalhex); i++ {
GlyphHex[i], err = strconv.ParseInt(portalhex[i:int(i+1)], 16, 16) GlyphHex[i], err = strconv.ParseInt(portalhex[i:int(i+1)], 16, 16)
if err != nil { if err != nil {
panic(err) return nil, errors.New("string provided is not hexadecimal ([0-9][A-F])")
} }
} }
// set options // assign image location of its glyph-hex value to an array of strings
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
for j := 0; j < len(glyphImg); j++ { for j := 0; j < len(glyphImg); j++ {
glyphImg[j] = fmt.Sprintf("assets/glyphs/%s/PORTALSYMBOL.%X.png", mode, GlyphHex[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++ { for k := 0; k < len(glyphImg); k++ {
data, err := Asset(glyphImg[k]) data, err := Asset(glyphImg[k])
if err != nil { if err != nil {
panic(err) return nil, errors.New("can not load images from assets: " + glyphImg[k])
} }
_, err2 := os.Stat(tempdir + "/assets/glyphs/" + mode + "/") err = ioutil.WriteFile(NmsTemp+"/"+glyphImg[k], []byte(data), 0644)
if os.IsNotExist(err2) { if err != nil {
errDir := os.MkdirAll(tempdir+"/assets/glyphs/"+mode, 0755) return nil, errors.New("can not write file to temp directory")
if errDir != nil {
panic(errDir)
}
} }
// 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 //Load/open images needed
grids := []*gim.Grid{ for iter := 0; iter < 12; iter++ {
{ImageFilePath: tempdir + "/" + glyphImg[0]}, {ImageFilePath: tempdir + "/" + glyphImg[1]}, imgArray[iter], err = gg.LoadPNG(NmsTemp + "/" + glyphImg[iter])
{ImageFilePath: tempdir + "/" + glyphImg[2]}, {ImageFilePath: tempdir + "/" + glyphImg[3]}, if err != nil {
{ImageFilePath: tempdir + "/" + glyphImg[4]}, {ImageFilePath: tempdir + "/" + glyphImg[5]}, return nil, errors.New("can not read glyph " + glyphImg[iter])
{ImageFilePath: tempdir + "/" + glyphImg[6]}, {ImageFilePath: tempdir + "/" + glyphImg[7]}, }
{ImageFilePath: tempdir + "/" + glyphImg[8]}, {ImageFilePath: tempdir + "/" + glyphImg[9]},
{ImageFilePath: tempdir + "/" + glyphImg[10]}, {ImageFilePath: tempdir + "/" + glyphImg[11]},
} }
// create new image from grids //begin concatenating images
rgba, err := gim.New(grids, vert, horz).Merge() // get image size of first glyph, all glyphs have the same X && Y dimension so we only need to measure one.
if err != nil { imgDim := imgArray[0].Bounds().Size()
panic(err)
//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 //Vertical layout
file, err := os.Create(savename) if layout == 10 || layout == 11 {
err = png.Encode(file, rgba) imgWidth := imgDim.X
if err != nil { imgHeight := imgDim.Y * 12
fmt.Println(err) 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 go 1.16
require ( require (
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b
github.com/ozankasikci/go-image-merge v0.2.2 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/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b h1:gqOBIAmkc/ZxXzFrM4wTub7tD0xYaOsaOQ5wOA74lJQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/ozankasikci/go-image-merge v0.2.2 h1:K370BLLTIsamwjAeViiPntf7GiG3h9pXzDmxXCbN8/0= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/ozankasikci/go-image-merge v0.2.2/go.mod h1:NQ2aN0b21buFx3p+5x4dZrKuPSLh2uBukK7F30BrYTo= 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 ( import (
"encoding/csv" "encoding/csv"
"fmt"
"io/ioutil"
"os" "os"
"strings" "strings"
) )
/* /*Translate Game languages and english
Translate words Translate.Lang sets source language for translations
options are:
korvax
gek
vykeen
atlas
english
*/ */
type Translate struct { type Translate struct {
Word string Lang string
} }
// trans - set up structure of a word iteration /*Translate source language to english
type trans0 struct { Translate any NMS language (ie. Korvax) to english
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
*/ */
func (t Translate) Kor2Eng() (returnstring string) { func (t Translate) ToEng(word string) (translation string) {
csvlines := openCSV("korvax-lang.csv") //return translate2english(word, langFile(t.Lang))
for range csvlines { return Translator(word, t.Lang, "english")
returnstring = (toEng(t, csvlines))
}
return
} }
/* /*Translate source language to Korvax
Eng2Kor translate english word to korvax word Translate any NMS language or english (ie. Gek) to Korvax
*/ */
func (t Translate) Eng2Kor() (returnstring string) { func (t Translate) ToKorvax(word string) (translation string) {
csvlines := openCSV("korvax-lang.csv") return Translator(word, t.Lang, "korvax")
for range csvlines {
returnstring = (toNMS(t, csvlines))
}
return
} }
/* /*Translate source language to Vy'Keen
Gek2Eng translate Gek word to english word Translate any NMS language or english (ie. Atlas) to Vy'Keen
*/ */
func (t Translate) Gek2Eng() (returnstring string) { func (t Translate) ToVykeen(word string) (translation string) {
csvlines := openCSV("gek-lang.csv") return Translator(word, t.Lang, "vykeen")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
} }
/* /*Translate source language to Gek
Eng2Gek translate english word to Gek word Translate any NMS language or english (ie. Vy'Keen) to Gek
*/ */
func (t Translate) Eng2Gek() (returnstring string) { func (t Translate) ToGek(word string) (translation string) {
csvlines := openCSV("gek-lang.csv") return Translator(word, t.Lang, "Gek")
for range csvlines {
returnstring = (toNMS(t, csvlines))
}
return
} }
/* /*Translate source language to Atlas
Vyk2Eng translate vykeen word to english word Translate any NMS language or english (ie. Korvax) to Atlas
*/ */
func (t Translate) Vyk2Eng() (returnstring string) { func (t Translate) ToAtlas(word string) (translation string) {
csvlines := openCSV("vykeen-lang.csv") return Translator(word, t.Lang, "atlas")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
} }
/* // read language files
Eng2Vyk translate english word to vykeen word func langFile(lang string) [][]string {
*/ filepath := NmsTemp + "/assets/lang/" + lang + "-lang.csv"
func (t Translate) Eng2Vyk() (returnstring string) { csvFile, err := os.Open(filepath)
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-")
if err != nil { if err != nil {
panic(err) panic(err)
} }
defer os.RemoveAll(tempdir) // Clean up temp files defer csvFile.Close()
// extract language file from resources.go lines, err := csv.NewReader(csvFile).ReadAll()
data, err := Asset("assets/lang/" + lagcsv)
if err != nil { if err != nil {
panic(err) panic(err)
} }
return lines
// wirte extracted data to temp dir }
err = ioutil.WriteFile(tempdir+"/"+lagcsv, []byte(data), 0644)
csvFile, err := os.Open(tempdir + "/" + lagcsv) /*Translate any in game language to another including english (ie. Korvax to Gek)
if err != nil { Translating from english to a game language will alway default to all lower case for now
fmt.Println(err) */
} func Translator(word string, source string, target string) string {
defer csvFile.Close() // close language file when finished var sourcekey [4]string
var targetkey [4]string
// read csv file from memory var dmy string
csvlines, err := csv.NewReader(csvFile).ReadAll() var rt string
if err != nil {
fmt.Println(err) rt = "*\\Kzzzzzzt\\*"
}
return csvlines 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) [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) { func RndPortal() (final string) {
rand.Seed(time.Now().UnixNano()) rand.Seed(time.Now().UnixNano())
min := 0x1 min := 0x1
@@ -39,3 +44,49 @@ func RndPortal() (final string) {
return 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
}